❶ 棧的順序存儲空間我在一個題里看到是,一個棧的順序存儲空間s(1:m),這表示什麼意思啊ԅ
棧的順序存儲空間為S(1:50),初始狀態為top=0。現經過一系列入棧與退棧運算後,top=20,則棧頂-棧底=20-0=20個元素。
❷ 棧只能順序存儲,這句話對嗎,為什麼
棧只能順序存儲,這句話不對。棧作為一種數據結構,是一種只能在一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom)。
一個新元素只能從棧頂一端進入,刪除時,只能刪除棧頂的元素,即剛剛被插入的元素。所以棧也稱為後進先出表。線性表可以順序存儲,也可以鏈式存儲,因此棧也可以採用鏈式存儲結構。
(2)順序棧的存儲空間擴展閱讀:
棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。棧也稱為後進先出表。
在計算機系統中,棧則是一個具有以上屬性的動態內存區域。程序可以將數據壓入棧中,也可以將數據從棧頂彈出。在i386機器中,棧頂由稱為esp的寄存器進行定位。壓棧的操作使得棧頂的地址減小,彈出的操作使得棧頂的地址增大。
棧在程序的運行中有著舉足輕重的作用。最重要的是棧保存了一個函數調用時所需要的維護信息,這常常稱之為堆棧幀或者活動記錄。堆棧幀一般包含如下幾方面的信息:
1、函數的返回地址和參數。
2、臨時變數:包括函數的非靜態局部變數以及編譯器自動生成的其他臨時變數。
鏈式存儲結構的特點:
1、比順序存儲結構的存儲密度小(鏈式存儲結構中每個結點都由數據域與指針域兩部分組成,相比順序存儲結構增加了存儲空間)。
2、邏輯上相鄰的節點物理上不必相鄰。
3、插入、刪除靈活 (不必移動節點,只要改變節點中的指針)。
4、查找節點時鏈式存儲要比順序存儲慢。
5、每個節點是由數據域和指針域組成。
6、由於簇是隨機分配的,這也使數據刪除後覆蓋幾率降低,恢復可能提高。
順序存儲結構的主要優點是節省存儲空間,因為分配給數據的存儲單元全用存放結點的數據(不考慮c/c++語言中數組需指定大小的情況),結點之間的邏輯關系沒有佔用額外的存儲空間。
採用這種方法時,可實現對結點的隨機存取,即每一個結點對應一個序號,由該序號可以直接計算出來結點的存儲地址。但順序存儲方法的主要缺點是不便於修改,對結點的插入、刪除運算時,可能要移動一系列的結點。
參考資料:網路-棧
參考資料:網路-鏈式存儲結構
參考資料:網路-順序存儲結構
❸ 棧的順序存儲是什麼
由於棧是運算受限的線性表,因此線性表的存儲結構對棧也適用,而線性表有順序存儲和鏈式存儲兩種,所以棧也有順序存儲和鏈式存儲兩種。
1.棧的順序存儲棧的順序存儲是利用一組地址連續的存儲單元依次存放從棧底到棧頂的數據元素,並附設指針top指示棧頂。
2.棧的順序存儲類型定義1)用內存動態分配方式定義棧的順序存儲(1)棧的順序存儲表示。
順序棧本質上是順序表的簡化,由於棧底位置是固定不變的,所以可以將棧底位置設置在存儲空間的基地址上,棧頂位置是隨著進棧和退棧操作而變化的,故用top來指示當前棧頂元素的下一個位置,通常稱top為棧頂指針。
❹ 棧的順序儲存空間中,元素個數怎麼算
因為棧頂在高位,也就是m+1處,進棧時top向低下標擴展,因此當top為m時,有1個元素;為m -1 時,有2個元素;為20時,有m- 20 +1 = m-19個元素在棧中。
棧(stack)又名堆棧,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。
向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
(4)順序棧的存儲空間擴展閱讀:
1、進棧(PUSH)演算法
① 若TOP≥n時,則給出溢出信息,作出錯處理(進棧前首先檢查棧是否已滿,滿則溢出;不滿則作②);
② 置TOP=TOP+1(棧指針加1,指向進棧地址);
③ S(TOP)=X,結束(X為新進棧的元素);
2、退棧(POP)演算法
① 若TOP≤0,則給出下溢信息,作出錯處理(退棧前先檢查是否已為空棧, 空則下溢;不空則作②);
② X=S(TOP),(退棧後的元素賦給X):
③ TOP=TOP-1,結束(棧指針減1,指向棧頂)。
❺ 有六個元素6,5,4,3,2,1 的順序進棧,得到出棧序列為:2 3 4 1 5 6,則棧的存儲空間至
要2先出棧,必須先進棧的65432都在棧內,因神友碧為棧是後進先出的,所以接著3、4都可出棧,1可以即進即出,游舉接著5出棧,6出棧,就完全符合出棧序列。所以棧的告神存儲空間至少為5.
❻ 棧的順序存儲空間s(1:m)是什麼意思
根據題意,棧空間如圖所示:
也就是說,棧是向上增長的,每次壓入一個元素,棧的TOP指針向上移動一位。
當壓入第一個元素時,TOP指針指向m+1-1 = m
當壓入第二個元素時,TOP指針指向m+1-2 = m-1
......
以此類推,
當壓入第N個元素時,TOP指針指向m+1-N = 20
則N = m+1-20 = m-19
選C。
❼ 數據結構中什麼叫做順序棧
順序棧
棧的順序存儲結構簡稱為順序棧,它是運算受限的順序表。
1、
順序棧的類型定義
#define
StackSize
100
//假定預分配的棧空間最多為100個元素
typedef
char
DataType;//假定棧元素的數據類型為字元
typedef
struct{
DataType
data[StackSize];
int
top;
}SeqStack;
注意:
①順序棧中元素用向量存放
②棧底位置是固定不變的,可設置在向量兩端的任意一個端點
③棧頂位置是隨著進棧和退棧操作而變化的,用一個整型量top(通常稱top為棧頂指針)來指示當前棧頂位置
2、
順序棧的基本操作
前提條件:
設S是SeqStack類型的指針變數。若棧底位置在向量的低端,即S->data[0]是棧底元素。
(1)
進棧操作
進棧時,需要將S->top加1
注意:
①S->top==StackSize-1表示棧滿
②"
上溢
"現象--當棧滿時,再做進棧運算產生空間溢出的現象。
上溢是一種出錯狀態,應設法避免。
(2)
退棧操作
退棧時,需將S->top減1
注意:
①S->top<0表示空棧
②"
下溢
"現象——當棧空時,做退棧運算產生的溢出現象。
下溢是正常現象,常用作程序控制轉移的條件。
順序棧在進棧和退棧操作時的具體變化情況【參見動畫演示】
3、順序棧的基本運算
(1)
置棧空
void
InitStack(SeqStack
*S)
{//將順序棧置空
S->top=-1;
}
(2)
判棧空
int
StackEmpty(SeqStack
*S)
{
return
S->top==-1;
}
(3)
判棧滿
int
StackFull(SeqStack
*SS)
{
return
S->top==StackSize-1;
}
(4)
進棧
void
Push(S,x)
{
if
(StackFull(S))
Error("Stack
overflow");
//上溢,退出運行
S->data[++S->top]=x;//棧頂指針加1後將x入棧
}
(5)
退棧
DataType
Pop(S)
{
if(StackEmpty(S))
Error("Stack
underflow");
//下溢,退出運行
return
S->data[S->top--];//棧頂元素返回後將棧頂指針減1
}
(6)
取棧頂元素
DataType
StackTop(S)
{
if(StackEmpty(S))
Error("Stack
is
empty");
return
S->data[S->top];
}
4、兩個棧共享同一存儲空間
當程序中同時使用兩個棧時,可以將兩個棧的棧底設在向量空間的兩端,讓兩個棧各自向中間延伸。當一個棧里的元素較多,超過向量空間的一半時,只要另一個棧的元素不多,那麼前者就可以佔用後者的部分存儲空間。
只有當整個向量空間被兩個棧占滿(即兩個棧頂相遇)時,才會發生上溢。因此,兩個棧共享一個長度為m的向量空間和兩個棧分別佔用兩個長度為 └ m/2┘和┌m/2┐的向量空間比較,前者發生上溢的概率比後者要小得多。
❽ 設棧的順序存儲空間為S(1:m),初始狀態為TOP=m+1.
將發生棧滿錯誤,因為初始狀態TOP=m+1,共m個空間,滿棧時top=1,再放入元素就會棧滿溢出
❾ 判定一個順序棧為棧滿的條件
表示順序棧的數組下標如果從0開始,棧空的條件是top==-1,棧滿的條件是top==maxsize-1;如果從1開始,top==1表示棧空,top==maxsize表示棧滿。
棧的元素依次存放在一個一維數組中。下標小的一端作為棧底。用一個變數記錄棧頂位置,稱「棧頂指針」。
(9)順序棧的存儲空間擴展閱讀:
棧的順序存儲結構是利宏李用內存中的一片起始位置確定的連續存儲區域來存放棧中的所有元素,另外為了指示棧頂的准確裂信位置,還需要引入一個棧頂指示變數top,採用順序存儲結構的肆絕輪棧稱為順序棧(sequence stack)。
設數組data[MAXSIZE]為棧的存儲空間,其中MAX-SIZE是一個預先設定的常數,為允許進棧結點的最大可能數目,即棧的容量。初始時棧空,top等於0。當top不等於0時,data[0]為棧底元素,即為當前停留在棧中時間最長的元素。
而data[top-1]為最後入棧的元素,即為棧頂元素。當top==MAXSIZE時,表示棧滿,如果此時再有結點進棧,將發生稱之為「上溢」(語法上表現為「數組越界」)的錯誤,而當top==0時再執行出棧操作,將發生稱之為「下溢」的錯誤。
給出了棧容量為6時,入棧、出棧操作以及棧空、棧滿等幾種典型的棧狀態。由於順序存儲結構多採用一維數組存放棧,因此必須特別注意「棧上溢」錯誤的發生;在實現入棧操作時,先判斷是否棧滿(stack full),如果棧滿,及時處理。
參考資料來源:網路-順序棧