鏈式鍊錶的標頭檔案與cpp檔案見前文
標頭檔案:
1#ifndef _linkstack_h_
2#define _linkstack_h_34
5 typedef void
linkstack;6//
建立乙個棧
7 linkstack*linkstack_create();8//
刪除乙個棧
9void linkstack_destroy(linkstack*stack);
10//
清空乙個棧
11void linkstack_clear(linkstack*stack);
12//
入棧13
int linkstack_push(linkstack* stack, void*item);
14//
出棧15
void* linkstack_pop(linkstack*stack);
16//
獲取棧頂元素
17void* linkstack_gettop(linkstack*stack);
18//
獲取棧的長度
19int linkstack_getsize(linkstack*stack);
2021
2223
#endif
cpp檔案:
1 #include "linklist.h
"2 #include "
linkstack.h
"3 #include 45//
6//需要呼叫前邊的linklist.h7//
8using
namespace
std;9//
定義乙個抽象的棧節點模型
10//
也就是用鏈式鍊錶的抽象模型來儲存item 以便插入元素
11//
就像12
//struct temp
13//
;21 typedef struct
_tag_linkstacknode
22linkstacknode;
2728
//建立乙個棧 相當於建立乙個線性表
29 linkstack*linkstack_create()
3033
//刪除乙個棧 相當於刪除乙個線性表
34//
先清空乙個棧 再刪除乙個鍊錶
35void linkstack_destroy(linkstack*stack)
3641
//清空乙個棧 相當於清空乙個線性表
42//
注意元素都是動態分配的記憶體
43//
應該先把所有元素彈出,並釋放節點記憶體
44void linkstack_clear(linkstack*stack)
4550
while(linkstack_getsize(stack) > 0)51
54return;55
}56//入棧 == 向煉表頭插入元素
57int linkstack_push(linkstack* stack, void*item)
5871 memset(temp, 0, sizeof
(linkstacknode));
72//
將item 也就是所需要儲存的資訊傳遞給temp->item
73 temp->item =item;
74//
現在可以直接插入
75 ret = linklist_insert(stack, (linklistnode*)temp, 0
);76
//異常處理
77if (ret != 0)78
85return -2;86
}87return0;
88}89//
出棧90
void* linkstack_pop(linkstack*stack)
91100
101 item = _temp->item ;
102//
因為插入時已經分配了記憶體
103//
因此出棧時需要釋放,
104free
(_temp);
105return
item;
106}
107//
獲取棧頂元素
108void* linkstack_gettop(linkstack*stack)
109117
return temp->item;
118}
119//
獲取棧的長度
120int linkstack_getsize(linkstack*stack)
121124
125
測試函式:
1 #include 2 #include "linkstack.h"3
using
namespace
std;45
6int
main ()717
//入棧
18for (i = 0; i < 5 ; i++)
1923
//顯示大小和棧頂元素
24 cout << "
size:
"<< linkstack_getsize(stack) <2526 cout << "
top:
"<< *((int *)linkstack_gettop(stack)) <2728
//出棧
29while(linkstack_getsize(stack) != 0)30
33//
入棧34 linkstack_push(stack, &a[1
]);35 cout << "
size:
"<< linkstack_getsize(stack) <36//
清空37
linkstack_clear(stack);
38 cout << "
after clear size:
"<< linkstack_getsize(stack) <39//
刪除乙個棧
40linkstack_destroy(stack);
4142 system("
pause");
43return0;
44}45
C 棧 鏈式儲存
ifndef my linkstack h define my linkstack h typedef void linkstack linkstack linkstack create void linkstack destroy linkstack stack void linkstack cl...
棧的鏈式儲存
線性表的順序儲存來模擬棧時,在尾部新增或者刪除元素,不會涉及到陣列的元素大量移動 用線性表的鏈式儲存來模擬棧的線性儲存,在頭部新增或刪除,不用從頭到尾遍歷 linkstack.h ifndef my linkstack h define my linkstack h typedef void lin...
鍊錶 06 鏈式棧
鏈式棧類 template class chainstack chainstack bool isempty const 判斷鏈式棧是否為空 type top const 取棧頂元素 void push const type e 向棧頂插入元素 void pop 刪除棧頂元素 void makeem...