堆疊的鍊錶方式實現

2022-04-06 02:49:36 字數 1857 閱讀 7611

除了公式化即陣列的實現方式,堆疊還可以用鍊錶的方式實現,這種方式對空間利用率更高。

在使用鍊錶來表示堆疊時,必須確定鍊錶的哪一端對應於棧頂。如果把鍊錶的右端作為棧頂,那麼可以利用鍊錶操作 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:

1

#ifndef node_h

2#define node_h

3 template

4class linkedstack;//

宣告模板類

56 template

7class

node8;

16#endif

stack:

(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是把堆疊的頂部的值移除並返回這個值。堆疊只提供對它的棧頂值的訪問。堆疊很容易實現,可以用靜態陣列 動態陣列 鍊錶實現堆疊。本文介紹的是鍊錶...