日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

记一道面试题:STL两个栈实现一个队列。

發(fā)布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 记一道面试题:STL两个栈实现一个队列。 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

面試題目

STL兩個棧實(shí)現(xiàn)一個隊(duì)列。

要求:只能使用棧的pop(),top()和push(),以及測試棧是否為空 empty()四個操作. 來實(shí)現(xiàn)隊(duì)列的clear(), push(),pop(),back(),front()等操作。

思路解析

用一個棧用作隊(duì)列的容器,另一個棧用作臨時容器,由于隊(duì)列 具有先進(jìn)先出的特性,而我們的棧 只有一端可以進(jìn)出,那么我們在做出隊(duì),也就是 要將一個棧的棧底元素 出隊(duì),所以要用到另一個棧作為輔助容器。

代碼展示

#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <stack> using namespace std; template<class T> class MyQueue {//對外接口 public://清空隊(duì)列void clear(){while (!stack1.empty())stack1.pop();while (!stack2.empty())stack2.pop();}//入隊(duì)void push(T data) {stack1.push(data); //stack1用來 入隊(duì)}//出隊(duì)T pop(){if (stack2.size() == 0) //stack2用來 出隊(duì),將stack1元素倒騰到stack2{while (stack1.size() > 0){T top = stack1.top();stack1.pop();stack2.push(top);}}if (stack2.size() == 0)throw std::exception("queue is empty");T top = stack2.top();stack2.pop();return top;}//隊(duì)尾T back() //入隊(duì)的,最后一個元素{if (stack1.size() > 0) //stack1中有數(shù)據(jù),棧頂為最后入隊(duì)的元素return stack1.top();while(stack2.size() > 0) //stack1中沒有數(shù)據(jù),stack2中有元素,棧底為入隊(duì)的最后一個元素,將stack2中的數(shù)據(jù)倒騰到stack1{T top = stack2.top();stack2.pop();stack1.push(top);}if (stack1.size() == 0)throw std::exception("queue is empty");return stack1.top();}//隊(duì)頭T front() //出隊(duì)的,第一個元素,{if (stack2.size() == 0) //stack2用來 出隊(duì),將stack1元素倒騰到stack2{while (stack1.size() > 0){T top = stack1.top();stack1.pop();stack2.push(top);}}if (stack2.size() == 0)throw std::exception("queue is empty");return stack2.top();} private:stack<T> stack1; stack<T> stack2; }; /* STL兩個棧實(shí)現(xiàn)一個隊(duì)列。要求:只能使用棧的pop(),top()和push(),以及測試棧是否為空 empty()四個操作. 來實(shí)現(xiàn)隊(duì)列的clear(), push(),pop(),back(),front()等操作。 */ int main(int argc, char *argv[]) {MyQueue<int> que;que.push(1);que.push(2);que.push(3);// 出隊(duì)<- 1 2 3 <-入隊(duì)cout << que.front() << endl;//1cout << que.back() << endl; //3cout << que.pop() << endl;//1cout << que.pop() << endl;//2cout << que.pop() << endl;//3que.clear();return EXIT_SUCCESS; }

運(yùn)行結(jié)果


總結(jié)

以上是生活随笔為你收集整理的记一道面试题:STL两个栈实现一个队列。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。