c++实现循环队列和链式队列的示例

  

  

1。循环队列中判断队空的方法是判断前==后,队满的方法是判断面前=(后+ 1)%最大尺寸。(我曾经想过为什么不用一个长度表示队长,当长度==最大容量时队满)原因就是,在频繁的队列操作中,多出一个变量会大量的增加执行时间,所以不如浪费一个数组空间来得划算。

  

2。用单链表表示的链式队列特别适合于数据元素变动较大的情形,而且不存在溢出的情况。

        template<类T>   类SeqQueue {   保护:   T *元素;   int,后方;   int最大容量;   公众:   SeqQueue (int深圳=10){   前=后=0;   最大尺寸=深圳;   元素=new T(最大尺寸);   }   ~ SeqQueue () {   []删除元素;   }   bool排队(const T&x){//入队   如果(isFull()返回false;   元素(后方)=x;   后=(后+ 1)%最大容量;   返回true;   }   bool出列(T&x){//出队   如果(isEmpty()返回false;   x=元素(前);   前面=(前+ 1)%最大容量;   返回true;   }   bool getFront (T&x){//获取队首元素   如果(isEmpty()返回false;   x=元素(前);   返回true;   }   空白makeEmpty(){//队列置空   前=后=0;   }   bool isEmpty () const{//判断队列是否为空   返回(后==前)& # 63;事实:假;   }   bool isFull () const{//队列是否为满   返回((后+ 1)%最大尺寸==前)& # 63;事实:假;   }   const int getSize () {   返回(rear-front +最大尺寸)%最大容量;   }   };      

<强>测试代码如下:

        无效的菜单(){   cout<& lt;“1。入队”& lt; & lt; endl;   cout<& lt;“2。获取队首元素”& lt; & lt; endl;   cout<& lt;“3。出队”& lt; & lt; endl;   cout<& lt;“4队。列置空”& lt; & lt; endl;   cout<& lt;“5。获取队中元素数量”& lt; & lt; endl;   cout<& lt;“6。退出“& lt; & lt; endl;   }   void函数(int num SeqQueue*平方){   开关(num) {   int x;   案例1:   ,cin>的在x;   平方→排队(x);   打破;   案例2:   平方→getFront (x);   cout<& lt; x<& lt; endl;   打破;   案例3:   平方→出列(x);   打破;   案例4:   平方→makeEmpty ();   打破;   例5:   x=平方→getSize ();   cout<& lt; x<& lt; endl;   打破;   默认值:   退出(1);   }   }   int主要(int命令行参数个数,char * * argv) {   SeqQueue*平方=new SeqQueue;   int num;   而(真){   菜单();   ,cin>的在num;   函数(num,平方);   }   删除平方;   返回0;   }      

        # include & lt; iostream>   使用名称空间性病;   template<类T>   struct LinkNode {   T数据;   LinkNode*链接;   LinkNode (T&x, LinkNode* l=NULL) {   数据=https://www.yisu.com/zixun/x;   链接=l;   }   };   模板类T> <类LinkedQueue {   保护:   LinkNode *, *后;   公众:   LinkedQueue () {   前面=后方=零;   }   ~ LinkedQueue () {   makeEmpty ();   }   bool排队(t x) {   如果(前面==NULL)   前=后=new LinkNode (x);   其他{   后==new LinkNode后->联系 (x);   }   返回true;   }   bool出列(t x) {   如果(isEmpty()返回false;   LinkNode * p=前面;   x=前->数据;   前面=前->链接;   删除p;   返回true;   }   bool getFront (t x) const {   如果(isEmpty()返回false;   x=前->数据;   返回true;   }   空白makeEmpty () {   LinkNode * p;   而(前面!=NULL) {   p=前线;   前面=前->链接;   删除p;   }   }   const bool isEmpty () {   返回(前面==NULL) ?真:假;   }   const int getSize () {   LinkNode * p;   int数=0;   p=前线;   而(p !=NULL) {   数+ +;   p=p ->联系;   }   返回计数;   }   };   无效的菜单(){   cout <" 1。入队”& lt; & lt; endl;   cout<& lt;“2。获取队首元素”& lt; & lt; endl;   cout<& lt;“3。出队”& lt; & lt; endl;   cout<& lt;“4队。列置空”& lt; & lt; endl;   cout<& lt;“5。获取队中元素数量”& lt; & lt; endl;   cout<& lt;“6。退出“& lt; & lt; endl;   }   void函数(int num LinkedQueue* lq) {   开关(num) {   int x;   案例1:   ,cin>的在x;   lq→排队(x);   打破;   案例2:   lq→getFront (x);   cout

c++实现循环队列和链式队列的示例