数据结构:栈和列之如何用两个队列实现一个栈?两个栈实现一个队列?
生活随笔
收集整理的這篇文章主要介紹了
数据结构:栈和列之如何用两个队列实现一个栈?两个栈实现一个队列?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、棧和隊列分析
棧是一種特殊的線性表。其特殊性在于限定插入和刪除數據元素的操作只能在線性表的一端進行
隊列(Queue)也是一種運算受限的線性表,它的運算限制與棧不同,是兩頭都有限制,插入只能在表的一端進行(只進不出),而刪
除只能在表的另一端進行(只出不進),允許刪除的一端稱為隊尾(rear),允許插入的一端稱為隊頭?(Front)。
2、兩個隊列實現一個棧:利用隊列先進先出的特性,在隊列一隊頭中插入一系列數據,只能從隊尾刪除數據,而此時再定義隊列二,
把隊列一先進入隊列的數據存放在隊列二,然后刪除隊列一最新插入的數據,從而模擬實現棧先插入進來的數據先出棧的功能。
//兩個隊列實現一個棧 /* template<class T> class CStack { public:void appendHead(const T&x) //從棧頂插入元素{q1.push(x);}T deleteTail() //從棧頂刪除元素{if (q2.size() <= 0){while (q1.size()-1){T value = q1.front();q1.pop();q2.push(value);}}T tail = q1.front();q1.pop();return tail;} private:queue<T> q1;queue<T> q2; };//測試 void main() {CStack<int> st;st.appendHead(5);st.appendHead(2);st.appendHead(3);st.appendHead(9);st.appendHead(3);st.appendHead(2);cout << st.deleteTail() << endl; } */
2、兩個棧實現一個隊列:道理和兩個隊列實現一個棧的原理類似,在此不再贅述
//兩個棧實現一個隊列 //棧:先進后出 //隊列:先進先出template<class T> class TwoQueue { public:TwoQueue(){}void In_Queue(const T&x) //從隊尾插入數據{s1.push(x);}T Out_Queue(){if (s2.size() == 0){while (!s1.empty()){T value=s1.top();s1.pop();s2.push(value);}}if (s2.size() > 0){T head = s2.top();s2.pop();return head;}else{return NULL;}}T Front_Queue(){if (s2.size() > 0){T head = s2.top();return head;}else{return NULL;}}size_t Empty_Queue(){return (s2.size()==0);}private:stack<T> s1; stack<T> s2; };int main() {TwoQueue<int> tq;tq.In_Queue(1);tq.In_Queue(2);tq.In_Queue(3);tq.In_Queue(4);cout << tq.Out_Queue() << endl;cout << tq.Out_Queue() << endl;cout<<tq.Front_Queue()<< endl;cout<<tq.Empty_Queue() <<endl;cout << tq.Out_Queue() << endl;cout << tq.Out_Queue() << endl;cout<<tq.Empty_Queue() <<endl; system("pause");return 0; }*/
總結
以上是生活随笔為你收集整理的数据结构:栈和列之如何用两个队列实现一个栈?两个栈实现一个队列?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle注射,中国联通沃支付一处Or
- 下一篇: 天涯明月刀服务器位置都在哪里,天涯明月刀