堆疊的順序儲存 順序棧

2021-08-08 22:25:47 字數 1399 閱讀 2753

堆疊的順序儲存結構簡稱順序棧,它是利用一組位址連續的儲存單元依次存放自棧底到棧頂之間的元素。

順序棧本質是順序表的簡化,唯一需要確定的是用順序表的那一段表示棧底。通常把順序表的表頭(陣列中下標為0)的一端作為棧底,同時附設指標top指示的棧頂元素在順序表中的位置,top也被成為棧頂指標

由於順序表都是在棧頂的位置進行相關操作,因而棧頂指標top的當前位置是非常重要的。在對順序表進行初始化時,棧頂指標top的初值習慣置為0,表示空棧(不含資料元素的棧),但因為c/c++中,陣列的下標從0開始,因此top值為0時表示空棧,則意味著棧頂指標指向的是實際上的棧頂元素的上乙個位置。因而,對用c/c++描述的順序棧一般以top=-1表示空棧,這樣,進棧操作時,先使top增1,用以表示新的棧頂位置,然後再把元素插入到top所指示的位置上;而出棧時則是先去除棧頂元素,再使top減1,top指標只想新的元素。這樣的操作的結果就是棧頂指標指向真正的棧頂元素。

當然,用top=0和top=-1表示空棧,都是可以的,只要實際的操作與此配套就行

注意:在順序棧中,top起到指示棧頂元素的作用,他的值可以表示陣列的下標,因此,top是乙個相對指標

在對順序棧進行操作時可能發生兩種溢位,一種稱為「上溢」(overflow),另一種成為「下溢」(underflow),設儲存棧元素的陣列長度為stacksize,則

(1)當top>=stacksize-1時,表示系統作為棧用的儲存控制項已滿。如果還有元素要求進棧,則棧溢位,即上溢,這時需要進行棧滿處理。如果是用靜態順序儲存結構表示順序棧,一旦發生上溢,程式將終止執行。並向使用者告知棧滿資訊;而如果採用動態順序儲存結構表示順序棧,一旦發生上溢,可向系統重新申請空間以滿足插入要求。

(2)當top=-1時,表示系統作為棧用的儲存區已空,棧中無任何元素。這時若還要做出棧運算,則發生下溢。通常用棧空來作為控制轉移的條件俺,表明資料已處理完畢。

一般來說,在對順序棧進行插入元素之前,要判斷棧是否「棧滿」,而對順序棧進行刪除元素之前,要判斷棧是否「棧空」。

順序棧的結構描述:

用c/c++描述順序棧時,可以用順序表的結構描述,只不過在順序棧中,習慣用識別符號top表示棧頂,而不用識別符號length。

#define stack_init_size 100  //順序棧(預設的)的初始分配最大容量

#define stackincrement //(預設的)增補控制項

typedef

structsqstack;//順序棧

這裡對比一下順序表的結構描述

typedef structsqlist;//順序表的動態分配
兩個結構的描述經過對比,區別一清二楚

堆疊的順序儲存

堆疊是一種特殊的線性表,是一種線性結構,只能對棧的頂端做操作,操作有入棧和出棧兩種,就是插入和刪除。堆疊一定要遵循先進後出 或叫後入先出 原則,就是最後乙個進去的元素一定是第乙個出來的。那麼堆疊要怎麼實現?第乙個很簡單的方法就是用乙個一維陣列,因為棧是一種按順序儲存的結構,所以可以用一維陣列來儲存棧...

堆疊的順序儲存實現

1 define maxsize 儲存資料元素的最大個數 23 typedef struct snode stack 45 struct snode 1 入棧 1 void push stack ptrs,elementtype item 89 else 1617 2 出棧 1 elementtyp...

堆疊的順序儲存實現

1 include2 include3 include4 define max 50 5 define ok 1 6using namespace std 7 typedef int elemtype 8 typedef struct stack 順序棧的定義 9tstack,tnode 1415 ...