又是一道面试题。。。
哎,前一阵子被面试笔试搞得有点疯,现在有点回归正轨的趋势,现在慢慢整理一下,想起来哪个就写哪个,下周应该就不是面试题目了~~~
当初一看到这个题目的第一反应就是,卧槽,我好像在哪里见到过,卧槽,我好像忘了具体怎么搞的了。。。好在当时灵光一闪,记起来要用两个栈,这样基本代码框架就出来了~~~
-
#ifndef MYQUEUE_H
-
#define MYQUEUE_H
-
#include <stack>
-
-
class MyQueue
-
{
-
public:
-
MyQueue();
-
void enqueue(int element);
-
int dequeue();
-
int length();
-
private:
-
std::stack<int> s1;
-
std::stack<int> s2;
-
};
-
-
#endif // MYQUEUE_H
接下来就是实现了,队列是先入先出(FIFO),栈是先入后出(LIFO),既然要用到两个栈,那就应该是来回倒了,选定一个栈用于入队,另一个栈用于出队,如果出队栈为空,则将入队栈元素全部倒入出队栈,再进行出队,代码如下:
-
#include "myqueue.h"
-
-
MyQueue::MyQueue()
-
{
-
-
}
-
void MyQueue::enqueue(int element){
-
s1.push(element);
-
}
-
int MyQueue::dequeue(){
-
int res, temp;
-
if(!s2.empty()){
-
res = s2.top();
-
s2.pop();
-
}else{
-
while(!s1.empty()){
-
temp = s1.top();
-
s1.pop();
-
s2.push(temp);
-
}
-
res = s2.top();
-
s2.pop();
-
}
-
return res;
-
}
-
int MyQueue::length(){
-
return s1.size()+s2.size();
-
}
阅读(1957) | 评论(0) | 转发(0) |