資料結構筆記 棧和佇列

2022-06-28 02:36:11 字數 2064 閱讀 5288

1 棧1.1 棧基本概念

出棧和入棧

棧的本質是乙個線性表,線性表有兩種儲存形式,那麼棧也有分為棧的順序儲存結構棧的鏈式儲存結構

最開始棧中不含有任何資料,叫做空棧,此時棧頂就是棧底

資料從棧頂進入,棧頂棧底分高,整個棧的當前容量變大

資料出棧時從棧頂彈出,棧頂下移,整個棧的當前容量變小

1.2 棧結構組成

1.3 棧基本操作

出棧操作

清空棧

void clearstack(sqstack *s)
銷毀棧

void destroystack(sqstack *s)

s->base = s->top =null;

s->stacksize = 0

;}

計算棧當前容量

int

stacklength(sqstack s)

- s.base 返回的是當前棧的容量(即當前棧的元素個數),該操作原理相當於:

//(*top - *base) / sizeof(elemtype)

1.4 棧的鏈式儲存結構

1.5 逆波蘭表示式

例如,對於(1-2)*(4+5),表示為1 2 - 4 5 + *,利用了棧的特性

【練習】

按照以上原理,實現逆波蘭計算器,要求實現以下功能:

1 #include 2 #include 3 #include 4

#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}

38​39//

出棧操作

40void pop(sqstack *s, elemtype *e)45​

46//

求棧長47

intstacklen(sqstack s)50​

51​52int

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 佇列

2.1 佇列概念

2.2 佇列基本操作

2.3 迴圈佇列

>>>>> end <<<<<

資料結構筆記 棧和佇列

棧和佇列的特性,乙個是先進後出,乙個是先進先出。對於棧來說,可以通過鍊錶或者陣列來進行實現 對於順序棧來說,如下 順序棧類seqstack的類定義 const int stacksize 10 10是示例性的資料,根據實際問題具體定義 template 定義模板類seqstack class seq...

資料結構 棧和佇列筆記

2.鏈棧 棧的應用 二 佇列 2.鏈式隊 總結棧又名堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它...

資料結構預習筆記(棧和佇列)

1.棧的定義 棧是限制僅在表的一端進行插入和刪除運算的線性表又稱為 後進先出表 lifo表 插入 刪除端稱為棧頂,另一端稱棧底 表中無元素稱空棧。2 棧的邏輯結構和儲存表示 棧的邏輯結構和線性表相同。棧的抽象資料型別有兩種典型的儲存表示 基於陣列的儲存表示和基於鍊錶的儲存表示。1 基於陣列的儲存表示...