两个栈实现队列与两个队列实现栈

看到的一道面试题,要求用两个栈实现队列,然后自己写了下。今晚先写两个栈实现队列吧,明天再写两个队列实现栈。

stack  和 queue 的基本操作

1、stack

stack 模板类的定义在<stack>头文件中。
stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要
的,在不指定容器类型时,默认的容器类型为deque。
定义stack 对象的示例代码如下:
stack<int> s1;
stack<string> s2;
stack 的基本操作有:
入栈,如例:s.push(x);
出栈,如例:s.pop();注意,出栈操作只是删除栈顶元素,并不返回该元素。
访问栈顶,如例:s.top()
判断栈空,如例:s.empty(),当栈空时,返回true。
访问栈中的元素个数,如例:s.size()。

2、queue

queue 模板类的定义在<queue>头文件中。
与stack 模板类很相似,queue 模板类也需要两个模板参数,一个是元素类型,一个容器类
型,元素类型是必要的,容器类型是可选的,默认为deque 类型。
定义queue 对象的示例代码如下:
queue<int> q1;
queue<double> q2;

queue 的基本操作有:

入队,如例:q.push(x); 将x 接到队列的末端。
出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
访问队首元素,如例:q.front(),即最早被压入队列的元素。
访问队尾元素,如例:q.back(),即最后被压入队列的元素。
判断队列空,如例:q.empty(),当队列空时,返回true。
访问队列中的元素个数,如例:q.size()

 

两个stack实现queue

 1 #include <IOSTREAM>
 2 #include <QUEUE>
 3 #include <STACK>
 4 using namespace  std;
 5 
 6 /*
 7 *整体思路:
 8 *
 9 *
10 */
11 template<typename T>
12 class CQueue{
13 private:
14     stack<T>  s1;
15     stack<T>  s2;
16 public:
17     T outQueue();   //出队
18     void inQueue(T const& Data);  //入队
19 };
20 
21 template<typename T>
22 void CQueue<T>::inQueue(T const& Data)
23 {
24     s1.push(Data);
25 }
26 
27 template<typename T>
28 T CQueue<T>::outQueue()
29 {
30     while (s1.size())
31     {
32         T dataTemp = s1.top();
33         s1.pop();
34         s2.push(dataTemp);
35     }
36     if (!s2.size())
37     {
38         cout<<"Queue is Empty"<<endl;
39         return 0;
40     }
41 
42     T data = s2.top();
43     s2.pop();
44 
45     return data;
46 }
47 
48 
49 int main()
50 {
51     
52 //    int array[5] = {1,2,3,4,5};
53     CQueue<int> myQueue;
54 
55     int i =0;
56     for (i=0;i<5;i++)
57     {
58         myQueue.inQueue(i);
59     }
60     for (i=0;i<10;i++)
61     {
62         cout<<myQueue.outQueue()<<endl;
63     }
64     return 0;
65 }

 

 

两个queue 实现的stack

 1 #include <IOSTREAM>
 2 #include <QUEUE>
 3 #include <STACK>
 4 using namespace  std;
 5 
 6 template<typename T>
 7 class CStack{
 8 private:
 9     queue<T> q1;
10     queue<T> q2;
11 public:
12     T outStack();
13     void inStack(T const& data);
14 };
15 
16 
17 template<typename T>
18 void CStack<T>::inStack(T const& data)
19 {
20     q1.push(data);
21 }
22 
23 
24 template<typename T>
25 T CStack<T>::outStack()
26 {
27     while(q1.size()>1)
28     {
29         T dataTemp = q1.front();
30         q2.push(dataTemp);
31         q1.pop();
32     }
33     if (q1.size()==1)
34     {
35         T data = q1.front();
36         q1.pop();
37         return data;
38     }
39 
40     while(q2.size()>1)
41     {
42         T dataTemp = q2.front();
43         q1.push(dataTemp);
44         q2.pop();
45     }
46     if (q2.size()==1)
47     {
48         T data = q2.front();
49         q2.pop();
50         return data;
51     }
52     cout<<"the Stack is Empty"<<endl;
53     return NULL;
54 }
55 
56 
57 int main()
58 {
59     CStack<int> myStack;
60     int i =0;
61     for (i=0;i<5;i++)
62         myStack.inStack(i);
63     for (i=0;i<10;i++)
64         cout<<myStack.outStack()<<endl;
65     return 0;
66 }

 

posted on 2015-03-26 00:38  _懒人  阅读(626)  评论(0编辑  收藏  举报

导航