1鏈棧通常用單鏈表表示,由於棧的主要操作是棧頂插入與刪除,顯然以鍊錶的頭部作為棧頂最方便,而且沒必要為了操作方便附加乙個頭結點2//
鏈式儲存結構(將單鏈表頭指標與棧頂合二為一)
3 typedef struct
stacknode
4stacknode,*linkstackptr;
8 typedef struct
linkstack
913 status push(linkstack *s,elemtype e)
1422
23 status pop(linkstack *s,elemtype *e)
2430 *e = s->top->data;
31 p = s->top;
32 s->top = s->top->next;
33free
(p);
34 s->count--;
35return
ok;
36}
3738
39 可執行**來自https://
blog.csdn.net/sinat_35297665/article/details/79489822
40 #include 41
42using
namespace
std;
4344 typedef struct
nodenode;
5152
5354 typedef struct
stacklink_stack;
6162
6364
/**建立乙個空棧
*/65
66 link_stack *creat_stack()
6768
8384
8586
/**入棧操作:push
*/87
88 link_stack * push_stack(link_stack *p,int
elem)
8990
119120
121122
/**出棧操作:pop
*/123
124 link_stack * pop_stack(link_stack *p)
125126
141142
else
157158
}159
160161
162/*
*棧的遍歷:輸出棧
*/163
164int show_stack(link_stack *p)
165166
183184
while(null !=temp)
185186
193194 cout <195196
197198
return0;
199200
}201
202203
204int
main()
205206
225226 cout << "
空棧插入5個元素後:
"<227228
show_stack(p);
229230
231232 cout << "
刪除3個元素後:
"<233234
for(i = 3;i--;)
235236
241242
show_stack(p);
243244 cout << "
count:
"<< p->count <245246
247248 cout << "
刪除2個元素後:
"<249250
for(i = 2;i--;)
251252
257258
show_stack(p);
259260 cout << "
count:
"<< p->count <261262
263264 push_stack(p,6
);265
266 cout << "
插入元素6後:
"<267268
show_stack(p);
269270 cout << "
count:
"<< p->count <271272
273274
return0;
275276 }
棧 佇列的鏈式儲存結構
前面已經講解過棧是什麼,也用順序儲存的方式實現了棧,今天學習了鍊錶,我們就用鏈式儲存來實現一下棧 棧就是規定在一端進行插入和刪除的線性表,而用鏈式儲存實現棧,是在頭部進行操作還是在尾部進行操作呢?那我們還是來看一下頭部插入和尾部插入的動畫 看完這兩個我們發現頭插和尾插的時間複雜度都是o 1 可是我們...
棧與佇列(2)棧的鏈式儲存
棧的鏈式儲存結構 鏈棧 基本上不存在棧滿的情況,棧滿意味著記憶體滿了,這時候電腦會宕機 棧頂指標和頭指標合二為一 鏈棧結構 typedef struct stacknode stacknode,linkstackptr typedef struct linkstack linkstack 進棧 先給...
鏈式儲存mysql 鏈棧 棧的鏈式儲存結構
前面講完了棧的順序儲存結構,我們現在來看看棧的鏈式儲存結構,簡稱為鏈棧。鏈棧是沒有附加頭結點的運算受限的單鏈表。棧頂指標就是鍊錶的頭指標。棧是用棧頂來做插入和刪除操作,那麼對於鏈棧的棧頂放在鍊錶的頭部還是尾部呢?單鏈表有頭指標,而棧頂指標也是必須的,那幹嗎不讓它倆合二為一呢,所以比較好的辦法是把棧頂...