資料結構 棧

2021-10-04 01:38:01 字數 3110 閱讀 7881

棧的抽象資料型別

棧的順序儲存結構(順序棧)

棧的鏈式儲存結構(鏈棧)

棧的作用

棧的應用

四則運算表示式求值

1、2、3依次進棧,可能的出棧結果:

元素數量越多,其出棧的變化會更多

adt stack

data

同線性表。元素具有相同的型別,相鄰元素具有前驅和後繼關係。

operation

initstack(*s)

初始化操作,建立乙個空棧s

destroy(*s)

若棧存在,則銷毀

clearstack(*s)

將棧清空

stackempty(s)

若棧為空,則返回true,否則返回false

gettop(s, *e)

若棧存在且非空,用 e 返回s的棧頂元素

push(*s, e)

若棧s存在,插入新元素e到棧s中並成為棧頂元素

pop(*s, e)

刪除棧s中棧頂元素,並用e返回其值

stacklength(s)

返回棧s的元素個數

endadt

#define ok 1

#define erroe 0

#define maxsize 100

typedef

struct

sqstack;

/* 時間複雜度 o(1) */

intpush

(sqstack *s,

int e)

/* 時間複雜度 o(1) */

思路:從陣列兩端向中間靠攏。top1 和 top2 是棧1 和棧2 的棧頂指標。即只要二者不相碰,則兩個棧就可以一直使用。

typedef

struct

sqdoublestack;

在入棧時需要判斷給棧1還是棧2插入元素

/* 時間複雜度 o(1) */

intpush

(sqdoublestack *s,

int stacknumber,

int e)

if(stacknumber ==2)

return ok;

}

/* 時間複雜度 o(1) */

intpop

(sqdoublestack *s,

int e,

int stacknumber)

if(stacknumber ==2)

return ok;

}

typedef

struct stacknode

stacknode,

*linkstackptr;

typedef

struct linkstack

linkstack;

/* 時間複雜度 o(1) */

intpush

(linkstack *s,

int e)

/* 時間複雜度 o(1) */

intpop

(linkstack *s,

int*e)

如果棧的使用過程中元素變化不可料,有時很小,又是非常大,則選用鏈棧;如果變化在可控範圍內,則選用順棧。

簡化程式設計問題,劃分不同關注層次,是得思考範圍縮小。

直接呼叫自己或通過一席立委的呼叫語句間接地呼叫自己的函式,稱作遞迴函式。

每個遞迴定義必須有乙個條件,防止陷入無窮遞迴

story time

第乙個月的小兔子沒有繁殖能力,兩個月後,開始生殖

所經過月數12

3456

78910

1112

兔子對數11

2358

1321

3455

89144

有沒有發現這個數列的規律:前兩項和等於第三項

/*

* 列印前 40位 fibonacci 數列

* 迭代法

*/int

main

(void

)int

main

(void

)

圓盤數 源柱 輔助柱 目標柱

void

hanoi

(int n,

int a,

int b, intc)

}

每次走 1 級 或者 2 級,輸入樓梯的階數,求不同的走法?

解決思路:用遞迴將問題分解成規模更小的子問題

階數走法11

2233

4n-1

n-2f(n) = f(n-1) + f(n-2)

邊界條件:

n < 0 0

n=1 1

n=1 1

n = 0 1

n =0 1

n=2 2

using namespace std;

int n;

intstairs

(int n)

intmain()

9+(3-1)×3+10÷2

用字尾表示式法為: 9 3 1 - 3*+10 2 / +

資料結構 棧 棧

可以把棧想像成乙個桶 進棧 就是把和桶口一樣大的燒餅往桶裡面扔 出棧 就是把燒餅拿出來 特點 先進後出。先扔進去的燒餅最後才能拿出來,最後扔進去的燒餅,第乙個拿出來 剛開始top 1 top 1 然後把進棧的元素賦值給data top 入棧操作 void push stack s,int x els...

資料結構 棧

例子 棧是一種被限制在只能在表的一端進行插入和刪除運算的線性表。區域性變數是用棧來儲存的 可以進行插入和刪除的一端稱為 棧頂 top 另一端稱為 棧底 bottom 當表中沒有元素時 表長為0的棧 稱為 空棧。棧的修改是按 後進先出的原則進行,因此棧被稱為後進先出 last in first out...

資料結構 棧

1.棧stack 是限定僅在表尾進行刪除和插入操作的線性表。允許插入刪除的一端叫做棧頂top,另外一端叫做棧底bottom。棧又稱為後進先出 lifo 的線性表。即表尾是指棧頂。2.順序棧 定義 top指向可存入元素的位置。typedef struct stacktypestacktype 插入 進...