使用两个栈模拟队列

来源:互联网 发布:动漫配音软件app 编辑:程序博客网 时间:2024/04/30 06:53
 
#include "stdafx.h"#include <iostream>using namespace std;//用栈模拟队列class Data{public:Data():data(0),next(NULL){}Data(int i):data(i),next(NULL){}int data;Data *next;};class Stack{public:Stack():Top(NULL){}void Push(Data i);void Pop(Data &d);bool IsEmpty();void Print();private:Data *Top;};//进栈void Stack::Push(Data d){Data *p=new Data(d.data);if (IsEmpty()){ //如果栈为空Top=p;}else{ //新节点成为栈顶节点p->next=Top;Top=p;}}//出栈void Stack::Pop(Data &s){if (IsEmpty()){//如果为空栈cout<<"Stack Empty!"<<endl;getchar();exit(1);}else{s.data=Top->data;Top=Top->next;}}//判断是否为空bool Stack::IsEmpty(){if (Top==NULL){return 1;}elsereturn 0;}//打印void Stack::Print(){Data *p=Top;while (p!=NULL){cout<<p->data<<" ";p=p->next;}cout<<endl;}class Queue{public:void enqueue(Data d); //入队void dequeue(Data &d); //出队bool IsEmpty();//是否为空private:Stack s1;//用于入队Stack s2;//用于出队};//入队void Queue::enqueue(Data d){s1.Push(d);//只对s1进行进栈操作}//出队void Queue::dequeue(Data &d){Data temp(0);//局部变量,用于临时存储if (s2.IsEmpty())//如果s2为空,把s1的所有元素push到s2中while (!s1.IsEmpty()){  s1.Pop(temp); //弹出s1的元素  s2.Push(temp);//压入s2中 } if(!s2.IsEmpty()){ //如果s2不为空//此时如果s2不为空,弹出s2的栈顶元素s2.Pop(d);}}//队列判空bool Queue::IsEmpty(){//如果两个栈都为空,则返回1,否则返回0if (s1.IsEmpty() && s2.IsEmpty()){return 1;}elsereturn 0;}int _tmain(int argc, _TCHAR* argv[]){Data data(0);//定义一个节点Queue q;q.enqueue(Data(1));q.enqueue(Data(2));q.enqueue(Data(3));q.dequeue(data);cout<<"dequeue "<<data.data<<endl;q.enqueue(Data(4));q.dequeue(data);cout<<"dequeue "<<data.data<<endl;q.dequeue(data);cout<<"dequeue "<<data.data<<endl;cout<<"IsEmpty "<<q.IsEmpty()<<endl;q.dequeue(data);cout<<"dequeue "<<data.data<<endl;cout<<"IsEmpty "<<q.IsEmpty()<<endl;    system("pause");return 0;}


 

原创粉丝点击