顺序循环及链队列表
- 格式:docx
- 大小:70.07 KB
- 文档页数:5
顺序循环队列SeqCircQueue.cpp#include <iostream>using namespace std;const int QueueSize=4;//循环队列类的声明template <class DataType>class SeqCircQueue{public:SeqCircQueue( ) //构造函数,创建一个空队列 { front=rear=QueueSize-1; }~ SeqCircQueue( ){ } //析构函数bool IsEmpty( ); //判断空队列bool IsFull(); //判断满队列void EnQueue(DataType x); //入队列操作DataType DeQueue( ); //出队列操作DataType GetQueue( ); //读队头元素void Print(); //遍历队列private:DataType data[QueueSize]; //分配存储空间int front,rear; //队头,队尾指针,队列元素的个数};//判断循环队列是否空,若空返回true,否则返回falsetemplate <class DataType>bool SeqCircQueue<DataType> ::IsEmpty( ){ return (rear == front)?true:false; }//判断循环队列是否空,若满返回true,否则返回falsetemplate <class DataType>bool SeqCircQueue<DataType> ::IsFull( ){ return (( rear+1) % QueueSize == front)?true:false; };//循环队列的实现——读队头元素template <class DataType>DataType SeqCircQueue<DataType> ::GetQueue( ){ if (IsEmpty( )) { cout<<"队列空"<<endl; exit(1); }int i = (front + 1) % QueueSize;return data[i];}//循环队列的实现——入队列template <class DataType>void SeqCircQueue<DataType> ::EnQueue(DataType x){ if (IsFull( )) { cout<<"队列满"<<endl; exit(1); };rear =(rear+1) % QueueSize;data[rear] = x;}//循环队列的实现———出队列template <class DataType>DataType SeqCircQueue<DataType> ::DeQueue( ){ if (IsEmpty( )) { cout<<"队列空"<<endl; exit(1); }front = (front + 1) % QueueSize;return data[front];}void main(){ SeqCircQueue<int> myList; //自动调用构造函数cout<<"判断循环队列是否空!"<<myList.IsEmpty()<<endl;cout<<"判断循环队列是满!"<<myList.IsFull()<<endl;//入队列操作cout<<"11 22 33 入队列"<<endl;myList.EnQueue(11);myList.EnQueue(22);myList.EnQueue(33);//读队头元素的值的操作cout<<"输出读队头元素的值"<<myList.GetQueue()<<endl;//出队列操作cout<<"输出队头元素出队列的值是:"<<myList.DeQueue()<<endl;//读队头元素的值的操作cout<<"输出读队头元素的值"<<myList.GetQueue()<<endl;}链队列LinkQueue.cpp#include <iostream>using namespace std;//链队列的结点结构体:template <class DataType>struct Node{DataType data;Node<DataType> *next;};//链队列类的声明template <class DataType>class LinkQueue{public:LinkQueue( ) //构造函数,创建一个空队列 {Node<DataType> *s; //创建一个头结点ss=new Node<DataType>;s->next=NULL;front=rear=s; //将队列头指针和尾指针都指向头结点s }~LinkQueue( ); //析构函数bool IsEmpty( ); //判断空队列void EnQueue(DataType x); //入队列操作DataType DeQueue( ); //出队列操作DataType GetQueue( ); //读队头元素private:Node<DataType> *front,*rear; //队列头,队尾指针};//析构函数template <class DataType>LinkQueue<DataType> ::~LinkQueue( ){Node<DataType> *p;while(front!=rear){p=front;front=front->next;delete p;}front=rear=NULL;}//判断链队列是否空,若空返回true,否则返回false template <class DataType>bool LinkQueue<DataType> ::IsEmpty( ){ return (rear == front)?true:false; }//链队列的实现——读队头元素template <class DataType>DataType LinkQueue<DataType> ::GetQueue( ){if (IsEmpty( )){ cout<<"队列空"<<endl; exit(1); }return front->next->data;}//链队列的实现——入队列template <class DataType>void LinkQueue<DataType> ::EnQueue(DataType x) {Node<DataType> *s; //创建一个头结点s s=new Node<DataType>;s->next=NULL; s->data=x;rear->next=s;rear=s;}//链队列的实现———出队列template <class DataType>DataType LinkQueue<DataType> ::DeQueue( ){ if (IsEmpty( )){ cout<<"队列空"<<endl; exit(1); }Node<DataType> *p;DataType x;p=front->next; x=p->data;front->next=p->next;if (p->next==NULL)rear=front;delete p;return x;}void main(){ LinkQueue<int> myList; //自动调用构造函数cout<<"判断链队列是否空!"<<myList.IsEmpty()<<endl;//入队列操作cout<<"11 22 33 入队列"<<endl;myList.EnQueue(11);myList.EnQueue(22);myList.EnQueue(33);//读队头元素的值的操作cout<<"输出读队头元素的值"<<myList.GetQueue()<<endl;//出队列操作cout<<"输出队头元素出队列的值是:"<<myList.DeQueue()<<endl;//读队头元素的值的操作cout<<"输出读队头元素的值"<<myList.GetQueue()<<endl;cout<<"输出队头元素出队列的值是:"<<myList.DeQueue()<<endl;cout<<"输出队头元素出队列的值是:"<<myList.DeQueue()<<endl;cout<<"输出队头元素出队列的值是:"<<myList.DeQueue()<<endl; }。