鏈式棧的介面實現

2021-07-03 06:56:27 字數 1581 閱讀 8001

1.棧的特點是 先進後出 。

2.鏈式棧沒有限定容量(maxsize),也就是棧可以容納的元素取決於記憶體分配。對特定的程式,用不同的方法實現,如還可以用陣列式的棧。

3.實際上是乙個沒有頭節點的鍊錶,只不過對操作做了限定

4.把棧頂元素定為 鍊錶的第乙個節點,也就是頭指標指向的結點為棧頂,這樣在壓棧和出棧是方便操作。

5.下面是對鏈式棧的實現,並寫了乙個驅動程式進行測試。

6..驅動程式說明:輸入僅由  ' ( '    和   ' ) ' 組成的 字元組合,判斷 括號是否匹配。

如 ( )      和        ()()     和     (())      都是匹配的。

7.注意,在dos命令列介面下,eof是用鍵盤的ctrl  +  z 組合 模擬的。另外,輸入eof需要在新的一行輸入.

# include # include # include # include typedef char datatype;   /* 對特定程式要求作修改為相應的資料型別*/ 

typedef struct stack

snode;

typedef snode* stack;

/************adt介面宣告******************/

void initstack(stack*pf);

int push(stack*pf,datatype tdata);

int pop(stack*pf);

int gettop(stack*pf,datatype *pdata);

unsigned int stacklength(stack*pf);

int stackisempty(stack*pf);

void destroystack(stack*pf);

/*****************end********************/

/*驅動測試程式說明:從控制台輸入 僅有 '(' 和 ')' 2個字元

檢測左右括號是否匹配,如() ,(()) 都為匹配,否則不匹配

*/int main (void)

gettop(&test,&previous); //獲取棧頂元素,為下一次匹配準備 }

printf("\n");

if(stackisempty(&test)) //經過迴圈匹配後棧空了,則說明匹配

puts("符號匹配!");

else

puts("符號不匹配!");

return 0; }

void initstack(stack*pf)

int push(stack*pf,datatype tdata)

int pop(stack*pf)

int gettop(stack*pf,datatype *pdata)

unsigned int stacklength(stack*pf)

return count;

}int stackisempty(stack*pf)

void destroystack(stack*pf)

return ;

}

棧 鏈式棧的實現

一 2 對於棧而言,通常允許插入 刪除操作的一端被稱為棧頂 top 另一端被稱為棧底 buttom 3 從棧頂壓入元素稱為進棧 push 4 從棧頂刪除元素稱為出棧 pop 棧是一種先進後出的線性表.二 可以採用單鏈表來儲存棧中的所有元素,這種結構的棧被稱為鏈棧。對於鏈棧而言,棧頂元素不斷改變,程式...

鏈式棧的實現

棧相比於鍊錶,它是一種特殊的資料模型,兩者既有聯絡 通過鍊錶的api函式可以改造出棧的api函式,這其中的原因在於兩者的底層邏輯是有相似的地方的,即 通過在鍊錶的頭部操作元素,就可以模擬出棧 區別在於,鍊錶和棧之間的對變數生命週期的管理不一樣 在實現棧的過程中,我們不可避免的用到了鍊錶的api函式 ...

實現鏈式棧

棧作為一種資料結構,它按照後進先出的原則儲存資料,只能在棧頂進行插入和刪除操作的特殊線性表。按照儲存方式不同,棧可以分為順序棧和鏈式棧。實現鏈式棧需要注意 1 採用鍊錶儲存結構 2 不需要預定義記憶體空間,不存在 鏈式棧滿 這種情況 3 解決了順序棧中沒有合理分配記憶體大小的難題。以下為具體實現 在...