棧的順序儲存結構和鏈式儲存結構

2021-08-28 19:56:39 字數 1839 閱讀 4466

在表尾進行插入和刪除操作的線性表(仍然滿足線性表的操作,只是在push和pop有些區別)

棧頂(top)允許插入和刪除,另一端稱棧底(bottom),不含任何資料元素的棧叫空棧。

棧:後進先出(last in first out)的線性表,簡稱lifo結構。

棧的插入稱為進棧,也稱壓棧,入棧。

棧的刪除稱為出棧,也稱彈棧。

因為棧本身就是乙個線性表,所以線性表的操作特性它都具備,針對它的特殊性,在它的操作上可能會有一些變化。將進棧和出棧分別改名為push和pop。由於棧本身是乙個線性表,所以線性表的順序儲存結構和鏈式儲存結構同樣適用於棧。

棧的順序儲存結構,簡稱順序棧。定義乙個top變數來指示棧定元素在陣列中的位置。若儲存棧的長度為stacksize,則棧頂位置top必需小於stacksize。下標從0開始,當棧存在乙個元素時候,top 等於 0 ,當棧為空棧時候,top 等於 -1。

棧的結構定義

typedef int selemtype;

typedef struct sqstack;

若現在有乙個棧,stacksize為5,則普通棧、空棧、滿棧的情況如下圖所示。

status pushstack(stack* s ,selemtype e)

status popstack(stack* s )

//棧的順序儲存結構

#include#define maxsize 10

#define ok 1

#define error -1

using namespace std;

typedef int selemtype;

typedef int status;

typedef struct

stack;

//兩棧共享空間

typedef struct

doublestack;

stack* creatstack()

status pushstack(stack* s ,selemtype e)

status popstack(stack* s )

void printstack(stack* s)

}//兩棧共享空間

status pushdoublestack(doublestack *s ,selemtype num ,selemtype insertstack)

//--和 ->運算等級

status popdoublestack(doublestack *s ,selemtype* e ,selemtype deletestack)

//selemtype* e 來接受出棧的值 deletestack從棧1 或者棧2 刪除

else if(deletestack == 2)

return ok;

}void main()

棧的鏈式儲存結構稱做鏈棧。

鏈棧空的定義top == null

進棧操作

status pushstacklinklist(stacklinklist* s,eletype e)

出棧操作

status popstacklinklist(stacklinklist* s,eletype* e)

棧的應用 ---遞迴!(沒有寫**)

佇列的順序儲存結構和鏈式儲存結構

佇列 queue 是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表 在隊尾進行插入操作,在對頭進行刪除操作 與棧相反,佇列是一種 先進先出 first in first out,fifo 的線性表。與棧相同的是,佇列也是一種重要的線性結構,實現乙個佇列同樣需要順序表或鍊錶作為基礎。佇列既可...

棧 鏈式儲存結構

講完了棧的順序儲存結構,現在來看棧的鏈式儲存結構,簡稱為鏈棧。想想看,棧只是棧頂來做插入和刪除操作,棧頂放在鍊錶的頭部還是尾部?由於單鏈表有頭指標,而棧頂指標也是必須的,所以比較好的辦法是把棧頂放在單鏈表的頭部。都已經有了棧頂在頭部了,單鏈表中常用的頭結點也就失去了意義,通常對於鏈棧來說,是不需要頭...

棧(鏈式儲存結構)

通常由乙個一維陣列和乙個棧頂元素變數組成 如下 define maxsize struct stacknode struct stacknode createstack void push struct stacknode s,elementtype x elementtype pop struct...