1 棧1.1 棧基本概念
出棧和入棧
棧的本質是乙個線性表,線性表有兩種儲存形式,那麼棧也有分為棧的順序儲存結構和棧的鏈式儲存結構
最開始棧中不含有任何資料,叫做空棧,此時棧頂就是棧底。
資料從棧頂進入,棧頂棧底分高,整個棧的當前容量變大
資料出棧時從棧頂彈出,棧頂下移,整個棧的當前容量變小
1.2 棧結構組成
1.3 棧基本操作
出棧操作
清空棧
void clearstack(sqstack *s)銷毀棧
void destroystack(sqstack *s)計算棧當前容量s->base = s->top =null;
s->stacksize = 0
;}
int1.4 棧的鏈式儲存結構stacklength(sqstack s)
- s.base 返回的是當前棧的容量(即當前棧的元素個數),該操作原理相當於:
//(*top - *base) / sizeof(elemtype)
1.5 逆波蘭表示式
例如,對於(1-2)*(4+5)
,表示為1 2 - 4 5 + *
,利用了棧的特性
【練習】按照以上原理,實現逆波蘭計算器,要求實現以下功能:
1 #include 2 #include 3 #include 42 佇列#define stack_init_size 20
5#define stack_increment 10
6#define max_buffer 107
8 typedef double
elemtype;
9 typedef struct
sqstack;14
15//
棧初始化
16void initstack(sqstack *s)22
23//
入棧操作
24void push(sqstack *s, elemtype e)
32 s->top = s->base + s->stacksize;
33 s->stacksize = s->stacksize +stack_increment;34}
35 *(s->top) =e;
36 s->top++;37}
3839//
出棧操作
40void pop(sqstack *s, elemtype *e)45
46//
求棧長47
intstacklen(sqstack s)50
5152int
main()
71 scanf("
%c", &c);
72if (c == '')
78}79
80switch
(c) else
105break
;106
}107 scanf("
%c", &c);
108}
109
110 pop(&s, &d);
111 printf("
最終的結果為: %f\n
", d);
112
113return0;
114 }
2.1 佇列概念
2.2 佇列基本操作
2.3 迴圈佇列
>>>>> end <<<<<
資料結構筆記 棧和佇列
棧和佇列的特性,乙個是先進後出,乙個是先進先出。對於棧來說,可以通過鍊錶或者陣列來進行實現 對於順序棧來說,如下 順序棧類seqstack的類定義 const int stacksize 10 10是示例性的資料,根據實際問題具體定義 template 定義模板類seqstack class seq...
資料結構 棧和佇列筆記
2.鏈棧 棧的應用 二 佇列 2.鏈式隊 總結棧又名堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它...
資料結構預習筆記(棧和佇列)
1.棧的定義 棧是限制僅在表的一端進行插入和刪除運算的線性表又稱為 後進先出表 lifo表 插入 刪除端稱為棧頂,另一端稱棧底 表中無元素稱空棧。2 棧的邏輯結構和儲存表示 棧的邏輯結構和線性表相同。棧的抽象資料型別有兩種典型的儲存表示 基於陣列的儲存表示和基於鍊錶的儲存表示。1 基於陣列的儲存表示...