標籤:

用2個棧模擬一個隊列

用2個棧模擬一個隊列

用2個棧模擬1個隊列的刪除和插入

思路:

- 刪除:棧2不為空的時候,彈出棧2的棧頂元素.

棧2為空的時候,將棧1中的元素逐個彈出並壓入棧2中.最後彈出棧2的棧頂元素.

  • 插入:直接插入棧1.

首先插入1,2,3.然後刪除,最後插入元素4.

在a1中插入1,2,3之後.刪除會刪除最新插入的元素1,所以2,3元素會在棧2中,元素4在棧1中.

root@gt:/home/Code# ./a.out 423#include <iostream>#include <stack>using namespace std;stack<int> a1;stack<int> a2;void appendTail(const int element){ a1.push(element);}int deleteHead(){ if(a2.size()==0) { while(a1.size()>0) { int& data = a1.top(); a1.pop(); a2.push(data); } } if(a2.size()==0) { cout<<"queue is empty!"<<endl; return -1; } int head = a2.top(); a2.pop(); return head;}void printStack(stack<int>& a){while(!a.empty()){ int head = a.top(); a.pop(); cout<<head<<endl;}}int main(){a1.push(1);a1.push(2);a1.push(3);deleteHead();appendTail(4);printStack(a1);cout<<endl;printStack(a2);return 0;}

推薦閱讀:

反轉鏈表
最高分是多少

TAG:演算法 | 筆試 |