題目描述:
利用兩個棧模擬乙個佇列演算法思想:
/*
這題真的挺巧妙的
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.思路 利用兩個棧,分別實現大頂堆和小頂堆,以小頂的棧...