程式碼隨想錄:用棧實現佇列
主要是記一下棧和佇列的定義和基本使用方法,值得注意的是pop和push都是操作,沒有返回值,需要先用top和front獲得頂端的值。
這個地方有個記憶技巧,棧只看“頂部頂端”,佇列看“前後端”,即top和front
- **建立棧**
```cpp
std::stack<int> s;
-
檢查是否為空
bool isEmpty = s.empty();
-
獲取棧的大小
int size = s.size();
-
訪問棧頂元素
int topElement = s.top();
-
新增元素(壓棧)
s.push(10);
-
刪除元素(彈棧)
s.pop();
-
建立佇列
std::queue<int> q;
-
檢查是否為空
bool isEmpty = q.empty();
-
獲取佇列的大小
int size = q.size();
-
訪問隊頭元素
int frontElement = q.front();
-
新增元素(入隊)
q.push(10);
-
刪除元素(出隊)
q.pop();
程式碼有最佳化空間,懶得改了
```cpp
class MyQueue {
public:
//透過另一個棧,每次push的時候把push的元素壓到棧底
stack<int> temp;
stack<int> target;
MyQueue() {
}
void push(int x) {
while(!target.empty()){
temp.push(target.top());
target.pop();
}
target.push(x);
while(!temp.empty()){
target.push(temp.top());
temp.pop();
}
}
int pop() {
int val= target.top();
target.pop();
return val;
}
int peek() {
return target.top();
}
bool empty() {
return target.empty();
}
};
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue* obj = new MyQueue();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->peek();
* bool param_4 = obj->empty();
*/