除了公式化即陣列的實現方式,堆疊還可以用鍊錶的方式實現,這種方式對空間利用率更高。
在使用鍊錶來表示堆疊時,必須確定鍊錶的哪一端對應於棧頂。如果把鍊錶的右端作為棧頂,那麼可以利用鍊錶操作 i n s e r t ( n , x )和d e l e t e ( n , x )來實現堆疊的插入和刪除操作,其中 n為鍊錶中的節點數目。這兩種鍊錶操作的時間複雜性均為 o( n )。另一方面,如果把鍊錶的左端作為棧頂,則可以利用鍊錶操作 i n s e r t ( 0 , x )和d e l e t e ( 1 , x )來實現堆疊的插入和刪除操作。這兩種鍊錶操作的時間複雜性均為o ( 1 )。以上分析表明,應該把鍊錶的左端作為棧頂。
c++**實現:
node.h:
1stack:#ifndef node_h
2#define node_h
3 template
4class linkedstack;//
宣告模板類
56 template
7class
node8;
16#endif
(exceptionerror見佇列的實現:公式化描述)
1測試:#ifndef linkedstack_h
2#define linkedstack_h
3 #include 4 #include "
node.h
"5 #include "
exceptionerror.h"6
7 template
8class
linkedstack
912 ~linkedstack();
13 friend std::ostream& operator
<
1419
else
2027}28
29return
output;30}
31bool isempty()const
32 t top()const;33
int suantity()const
;34 linkedstack& add(const t&x);
35 linkedstack& delete(t&x);
36private
:37 node*top;
38};
3940 template
41 linkedstack::~linkedstack()
4250}51
52 template
53 t linkedstack::top()const
5459
return top->data;60}
6162 template
63 linkedstack& linkedstack::add(const t&x)
6472
73 template
74 linkedstack& linkedstack::delete(t&x)
7580
else
8190}91
92 template
93int linkedstack::suantity()const
94102
return
cnt;
103}
104#endif
1 #include "輸出:linkedstack.h"2
3int
main()
4
堆疊的鍊錶實現
鍊錶是帶頭結點的.每次執行入棧操作,都是把資料壓入第1個節點.完整 如下 include define true 1 define false 0 typedef int elementtype struct s stack typedef struct s stack stack typedef ...
鍊錶堆疊C實現
typedef int elementtype typedef structlist list makeempty void insert elementtype x,int i list ptrl if i 1 i ptrl last 2 for j ptrl last j i 1 j 將a i ...
用鍊錶實現堆疊
堆疊資料一種後進先出的資料結構,只能在一端 稱為棧頂 top 對資料項進行插入和刪除。基本的堆疊操作是push和pop,push是把乙個新值壓入堆疊的頂部,pop是把堆疊的頂部的值移除並返回這個值。堆疊只提供對它的棧頂值的訪問。堆疊很容易實現,可以用靜態陣列 動態陣列 鍊錶實現堆疊。本文介紹的是鍊錶...