摘要:劍指用兩個(gè)隊(duì)列實(shí)現(xiàn)一個(gè)棧聲明文章均為本人技術(shù)筆記,轉(zhuǎn)載請(qǐng)注明出處解題思路實(shí)現(xiàn)功能用兩個(gè)隊(duì)列實(shí)現(xiàn)一個(gè)棧,實(shí)現(xiàn),,和方法解題思路假設(shè)有隊(duì)列和實(shí)現(xiàn)棧的操作實(shí)現(xiàn)棧操作始終用來入隊(duì)實(shí)現(xiàn)實(shí)現(xiàn)棧的方法模擬棧的過程中,保證兩個(gè)隊(duì)列中始終有一個(gè)隊(duì)列為空,另一
劍指offer/LintCode494_用兩個(gè)隊(duì)列實(shí)現(xiàn)一個(gè)棧 聲明
文章均為本人技術(shù)筆記,轉(zhuǎn)載請(qǐng)注明出處https://segmentfault.com/u/yzwall
解題思路 實(shí)現(xiàn)功能:用兩個(gè)隊(duì)列實(shí)現(xiàn)一個(gè)棧,實(shí)現(xiàn)push(element),pop(),top()和isEmpty()方法;
解題思路假設(shè)有隊(duì)列queue1和queue2;
實(shí)現(xiàn)棧的push(element)操作實(shí)現(xiàn)棧push(element)操作:始終用來queue1入隊(duì)實(shí)現(xiàn);
實(shí)現(xiàn)棧的pop()方法模擬棧的過程中,保證兩個(gè)隊(duì)列中始終有一個(gè)隊(duì)列為空,另一個(gè)隊(duì)列不空,空棧時(shí)兩隊(duì)列全部為空;;
queue1和queue2運(yùn)行過程中有時(shí)充當(dāng)from,有時(shí)充當(dāng)to;
非空隊(duì)列from中所有元素依次出隊(duì)并入隊(duì)to隊(duì)列中,直到from中只剩下一個(gè)元素,
實(shí)現(xiàn)pop()操作:彈出from中最后一個(gè)元素;
實(shí)現(xiàn)top()操作:保存from中最后一個(gè)元素并返回,from彈出并入隊(duì)to隊(duì)列中(保證每次操作完成后,兩個(gè)隊(duì)列中始終有一個(gè)隊(duì)列為空,另一個(gè)隊(duì)列不空,空棧除外);
注意點(diǎn)使用java.util.ArrayDeque實(shí)現(xiàn)隊(duì)列時(shí),切記用offer()方法入隊(duì)而不用push()方法,用poll()方法出隊(duì)而不用pop()方法;
題目鏈接lintcode 494: http://www.lintcode.com/en/problem/implement-stack-by-two-queues/;
Java代碼/** * 用兩個(gè)隊(duì)列實(shí)現(xiàn)一個(gè)棧 * http://www.lintcode.com/en/problem/implement-stack-by-two-queues/ * @author yzwall */ import java.util.ArrayDeque; class Stack { private ArrayDequequeue1; private ArrayDeque queue2; int top; Stack() { this.queue1 = new ArrayDeque<>(); this.queue2 = new ArrayDeque<>(); } // queue1始終負(fù)責(zé)實(shí)現(xiàn)棧的push操作 public void push(int element) { queue1.offer(element); } // 將from隊(duì)列元素出隊(duì),并依次入隊(duì)到to隊(duì)列,直到from隊(duì)列中只有一個(gè)元素 public void move(ArrayDeque from, ArrayDeque to) { while (from.size() > 1) { to.offer(from.poll()); } } public void pop() { if (!isEmpty()) { if (!queue1.isEmpty()) { move(queue1, queue2); // queue1隊(duì)列pop后為空 queue1.poll(); } else if (!queue2.isEmpty()) { move(queue2, queue1); // queue1隊(duì)列pop后為空 queue2.poll(); } } } public int top() { if (!isEmpty()) { if (!queue1.isEmpty()) { move(queue1, queue2); // 獲取模擬棧頂元素,清空棧頂所在隊(duì)列 top = queue1.peek(); queue2.offer(queue1.poll()); } else if (!queue2.isEmpty()) { move(queue2, queue1); // 獲取模擬棧頂元素,清空棧頂所在隊(duì)列 top = queue2.peek(); queue1.offer(queue2.poll()); } return top; } return 0; } public boolean isEmpty() { return queue1.isEmpty() && queue2.isEmpty(); } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/67039.html
摘要:劍指用兩個(gè)棧模擬隊(duì)列聲明文章均為本人技術(shù)筆記,轉(zhuǎn)載請(qǐng)注明出處解題思路實(shí)現(xiàn)功能用兩個(gè)棧模擬實(shí)現(xiàn)一個(gè)隊(duì)列的,和操作解題思路假設(shè)有兩個(gè)棧隊(duì)列實(shí)現(xiàn)始終用入棧實(shí)現(xiàn)隊(duì)列和實(shí)現(xiàn)由于依次出棧并壓入中,恰好保證中順序與模擬隊(duì)列順序一致,始終保證棧頂元素為模擬 劍指offer/LintCode40_用兩個(gè)棧模擬隊(duì)列 聲明 文章均為本人技術(shù)筆記,轉(zhuǎn)載請(qǐng)注明出處https://segmentfault.com...
摘要:劍指最小棧聲明文章均為本人技術(shù)筆記,轉(zhuǎn)載請(qǐng)注明出處解題思路實(shí)現(xiàn)功能實(shí)現(xiàn)一個(gè)最小棧,要求操作均為復(fù)雜度,解題思路用棧存儲(chǔ)數(shù)據(jù)用最小棧存儲(chǔ)中最小元素,保證棧頂元素與棧頂元素同步,表示此時(shí)最小值將與此時(shí)最小值比較,將更小的一方壓棧,保證中棧頂始終 劍指offer/LintCode12_最小棧 聲明 文章均為本人技術(shù)筆記,轉(zhuǎn)載請(qǐng)注明出處https://segmentfault.com/u/yz...
摘要:題目描述用兩個(gè)棧來實(shí)現(xiàn)一個(gè)隊(duì)列,完成隊(duì)列的和操作。隊(duì)列中的元素為類型。下面是實(shí)現(xiàn)代碼。 題目描述 ????用兩個(gè)棧來實(shí)現(xiàn)一個(gè)隊(duì)列,完成隊(duì)列的Push和Pop操作。 隊(duì)列中的元素為int類型。 解題方法 let stack1=[],//兩個(gè)數(shù)組模擬棧的行為 stack2=[]; function push(node) { // write code here //...
摘要:題目用兩個(gè)棧來實(shí)現(xiàn)一個(gè)隊(duì)列,完成隊(duì)列的和操作。隊(duì)列中的元素為類型。基本思路棧用于入隊(duì)列存儲(chǔ)棧出隊(duì)列時(shí)將棧的數(shù)據(jù)依次出棧,并入棧到棧中棧出棧即棧的底部數(shù)據(jù)即隊(duì)列要出的數(shù)據(jù)。注意棧為空才能補(bǔ)充棧的數(shù)據(jù),否則會(huì)打亂當(dāng)前的順序。 題目 用兩個(gè)棧來實(shí)現(xiàn)一個(gè)隊(duì)列,完成隊(duì)列的Push和Pop操作。 隊(duì)列中的元素為int類型。 基本思路 棧1: 用于入隊(duì)列存儲(chǔ) 棧2: 出隊(duì)列時(shí)將棧1的數(shù)據(jù)依次出棧,并...
閱讀 2215·2021-11-22 11:56
閱讀 2657·2021-10-08 10:05
閱讀 7840·2021-09-22 15:53
閱讀 1927·2021-09-22 15:29
閱讀 2247·2021-09-08 09:35
閱讀 3370·2021-09-07 10:12
閱讀 1390·2019-08-30 13:11
閱讀 1993·2019-08-28 17:54