題目9:用兩個棧實現佇列
用兩個棧來實現一個佇列,完成佇列的Push和Pop操作。 佇列中的元素為int型別。
難度⭐
思路
stack1 正向佇列 用於新增。
stack2 反向佇列 用於刪除。
我的程式碼。
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
if(stack2.size()<=0)
{
while(stack1.size()>0)
{
stack2.push(stack1.top());
stack1.pop();
}
}
if(stack2.size()==0)
{
throw exception();
}
int a=stack2.top();
stack2.pop();
return a;
}
private:
stack<int> stack1;
stack<int> stack2;
};
vs2005上編譯。
注意 T& 的含義,代表引用。
模板的用法。
#pragma once
#include <stack>
#include <exception>
using namespace std;
template <typename T> class CQueue
{
public:
CQueue(void);
~CQueue(void);
// 在佇列末尾新增一個結點
void appendTail(const T& node);
// 刪除佇列的頭結點
T deleteHead();
private:
stack<T> stack1;
stack<T> stack2;
};
template <typename T> CQueue<T>::CQueue(void)
{
}
template <typename T> CQueue<T>::~CQueue(void)
{
}
//我的程式碼
template<typename T> void CQueue<T>::appendTail(const T& element)
{
stack1.push(element);
}
template<typename T> T CQueue<T>::deleteHead()
{
if(stack2.size()<=0)
{
//先從頭開始壓入棧中
while(stack1.size()>0)
{
stack2.push(stack1.top());
stack1.pop();
}
}
if (stack2.size()==0)
{
throw exception();
}
T& head=stack2.top();
stack2.pop();
return head ;
}
python
增#直接push 到 stack1
刪#如果stack2 是空的就從stack1 取數(while),然後pop stack2.否則異常
class Solution:
def __init__(self):
self.stackA = []
self.stackB = []
def push(self, node):
self.stackA.append(node)
def pop(self):
if self.stackB:
return self.stackB.pop()
elif self.stackA == []:
return None
else:
while self.stackA:
self.stackB.append(self.stackA.pop())
return self.stackB.pop()
java
刪#對stack2判空,如果空就取,不空就.pop(.top())
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
}
public int pop() {
if(stack1.empty()&&stack2.empty())
{
throw new RuntimeException("Queue is empty!");
}
if(stack2.empty())
{
while(!stack1.empty())
{
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
}
相關題目
兩個佇列描述一個棧
相關文章
- 9. 題目:對佇列實現棧&用棧實現佇列佇列
- 用兩個棧實現佇列佇列
- 面試題之【用兩個棧實現佇列】面試題佇列
- 兩個棧實現佇列佇列
- [每日一題] 第七題:用兩個棧實現佇列每日一題佇列
- 兩個棧實現佇列操作佇列
- 用2個棧實現佇列佇列
- 劍指offer | 09. 用兩個棧實現佇列佇列
- 劍指offer-用兩個棧實現佇列-php佇列PHP
- 【劍指offer】兩個棧實現一個佇列佇列
- 【劍指offer】兩個佇列實現一個棧佇列
- 用佇列實現棧佇列
- 用棧實現佇列佇列
- 劍指offer(java實現)第5題“用兩個棧實現佇列”-牛客網Java佇列
- offer通過--7兩個棧實現佇列-2佇列
- offer通過--8兩個棧實現佇列-2佇列
- 【ZJOF】用來個棧來實現一個佇列佇列
- Day 10| 232.用棧實現佇列 、 225. 用佇列實現棧佇列
- 用JavaScript實現棧與佇列JavaScript佇列
- 通過佇列實現棧OR通過棧實現佇列佇列
- leedcode-用佇列實現棧佇列
- leedcode-用棧實現佇列佇列
- 用棧實現佇列,實現Enqueue和Dequeue方法佇列ENQ
- Java面試題:棧和佇列的實現Java面試題佇列
- 用佇列實現棧,用棧實現佇列,聽起來有點繞,都搞懂了就掌握了精髓!佇列
- leetcode155. 最小棧 1441. 用棧操作構建陣列 劍指 Offer 09. 用兩個棧實現佇列LeetCode陣列佇列
- 力扣-232. 用棧實現佇列力扣佇列
- 演算法學習記錄五(C++)--->兩個棧實現佇列演算法C++佇列
- [CareerCup] 3.5 Implement Queue using Two Stacks 使用兩個棧來實現佇列佇列
- 《劍指 Offer》棧實現佇列佇列
- C#實現棧和佇列C#佇列
- LeetCode225. 用佇列實現棧LeetCode佇列
- 利用棧實現佇列(C語言實現)佇列C語言
- 資料結構 使用2個棧實現一個佇列資料結構佇列
- 怎樣用一個佇列和一個棧實現求一個表示式的值?佇列
- 實現無鎖的棧與佇列(4)佇列
- 實現無鎖的棧與佇列(3)佇列
- 實現無鎖的棧與佇列(1)佇列