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 解決了順序棧中沒有合理分配記憶體大小的難題。以下為具體實現 在...