zl程序教程

您现在的位置是:首页 >  其它

当前栏目

CareerCup-3.5

3.5 CareerCup
2023-09-14 08:57:28 时间

Implement a MyQueue class which implements a queue using two stacks

开始想到的方法是入队的时候数据进入栈0,出队的时候数据移入栈1再pop。看了答案方法更好。只需要单向挪动。问题在于思维定势,想到队列,总觉得这些数据必须按照顺序在一个栈里。

#include iostream 

using namespace std; 

typedef int Data; 

struct Node 

 Node(Data d):data(d){next = NULL;}; 

 Data data; 

 Node* next; 

class Stack 

public: 

 Stack():topNode(NULL){}; 

 void pop() 

 if(topNode != NULL) 

 Node* p = topNode; 

 topNode = topNode- next; 

 delete p; 

 } else { 

 throw "Empty Stack"; 

 Data top() 

 if(topNode != NULL) 

 return topNode- data; 

 } else { 

 throw "Empty Stack"; 

 void push(Data data) 

 Node* d = new Node(data); 

 d- next = topNode; 

 topNode = d; 

 bool isEmpty(){return topNode == NULL;}; 

private: 

 Node* topNode; 

class MyQueue 

public: 

 void enqueue(Data data) 

 stack[0].push(data); 

 Data dequeue() 

 if(stack[1].isEmpty()) 

 while(!stack[0].isEmpty()) 

 stack[1].push(stack[0].top()); 

 stack[0].pop(); 

 if(stack[1].isEmpty()) 

 throw "Empty Queue"; 

 Data data = stack[1].top(); 

 stack[1].pop(); 

 return data; 

 bool isEmpty(){return stack[0].isEmpty() stack[1].isEmpty();}; 

private: 

 Stack stack[2]; 

int main() 

 MyQueue queue; 

 for(int i=0; i i++) 

 queue.enqueue(i*2); 

 queue.enqueue(i*2+1); 

 cout queue.dequeue() endl; 

 cout queue.dequeue() endl; 

 system("pause");