王道課後習題3 2 3 利用兩個棧模擬乙個佇列

2021-09-26 15:09:21 字數 921 閱讀 9744

題目描述:

利用兩個棧模擬乙個佇列

演算法思想:

/*

這題真的挺巧妙的

s1:<1 1入隊,入s1棧

s2:s1:

s2:1 s2為空,s1全部元素(目前只有1)入s2棧.注意這裡s1為空,之前還以為s1還存有1.

當s1有元素x入棧時,如果s2為空,那麼就必須把當前s1中的元素全部逆置入s2棧之後才能把元素x入s1棧

——————————————————————

s1:<2 2入隊,入s1棧

s2:1

s1:2 <3 3入隊,入s1棧

s2:1

s1:2 3

s2: 1出隊

——————————————————————

s1:2 3 < 4 4要入隊的時候,發現s2為空

s2:s1:4

s2:3 2 先把s1的元素逆置入s2棧,再把4入s1棧

——————————————————————

王道答案的解法是另一種解法,它是在出隊的時候判斷s2是否為空,如果為空再判斷s1是否為空,如果s1不為空,則把s1的元素逆置存入s2中再pop。

*/

核心**:

int enqueue(sqstack &s1,sqstack &s2,int x)

if(stackfull(s1)==true)

if(stackempty(s2)==true)

}push(s1,x);

return 1;

}int dequeue(sqstack &s2,int &x)

}int queueempty(sqstack s1,sqstack s2)

王道課後習題2 3 22 兩個鍊錶的共同字尾

題目描述 帶頭結點的單鏈表,尋找兩個鍊錶的共同字尾的起始位置。演算法思想 雙指標法 核心 雙指標法 int length lnode l 注意 這裡之前寫成了int length lnode l 用的引用。這樣的話,head1和head2最後都會變成null。難怪執行不對。return k lnod...

王道課後習題2 3 8 找出兩個鍊錶的公共結點

題目描述 給定兩個單鏈表,編寫演算法找出兩個鍊錶的公共結點。演算法思想 核心 include include typedef struct lnode 如果不在這裡加lnode,結構體內的lnode 就會報錯 lnode int length lnode l 注意 這裡之前寫成了int length...

演算法 利用兩個棧實現棧排序

棧排序。編寫程式,對棧進行排序使最小元素位於棧頂。最多只能使用乙個其他的臨時棧存放資料,但不得將元素複製到別的資料結構 如陣列 中。該棧支援如下操作 push pop peek 和 isempty。當棧為空時,peek 返回 1。leetcode.思路 利用兩個棧,分別實現大頂堆和小頂堆,以小頂的棧...