棧的抽象資料型別
棧的順序儲存結構(順序棧)
棧的鏈式儲存結構(鏈棧)
棧的作用
棧的應用
四則運算表示式求值
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 插入 進...