欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實現(xiàn)循環(huán)隊列和鏈式隊列的示例

 更新時間:2017年12月18日 14:52:47   作者:windnotstop  
下面小編就為大家分享一篇C++實現(xiàn)循環(huán)隊列和鏈式隊列的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

循環(huán)隊列:

1.循環(huán)隊列中判斷隊空的方法是判斷front==rear,隊滿的方法是判斷front=(rear+1)%maxSize。(我曾經(jīng)想過為什么不用一個length表示隊長,當length==maxSize時隊滿)原因就是,在頻繁的隊列操作中,多出一個變量會大量的增加執(zhí)行時間,所以不如浪費一個數(shù)組空間來得劃算。

2.用單鏈表表示的鏈式隊列特別適合于數(shù)據(jù)元素變動較大的情形,而且不存在溢出的情況。

template<class T>
class SeqQueue{
 protected:
  T *element;
  int front,rear;
  int maxSize;
 public:
  SeqQueue(int sz=10){
   front=rear=0;
   maxSize=sz;
   element=new T[maxSize];
  }
  ~SeqQueue(){
   delete[] element;
  }
  bool EnQueue(const T& x){//入隊 
   if(isFull()) return false;
   element[rear]=x;
   rear=(rear+1)%maxSize;
   return true;
  }
  bool DeQueue(T& x){//出隊 
   if(isEmpty()) return false;
   x=element[front];
   front=(front+1)%maxSize;
   return true;
  }
  bool getFront(T& x){//獲取隊首元素 
   if(isEmpty()) return false;
   x=element[front];
   return true;
  }
  void makeEmpty(){//隊列置空 
   front=rear=0;
  }
  bool isEmpty()const{//判斷隊列是否為空 
   return (rear==front)?true:false;
  }
  bool isFull()const{//隊列是否為滿
    return ((rear+1)%maxSize==front)?true:false;
  }
  int getSize()const{
   return (rear-front+maxSize)%maxSize;
  }
};

測試代碼如下:

void menu(){
 cout<<"1.入隊"<<endl;
 cout<<"2.獲取隊首元素"<<endl;
 cout<<"3.出隊"<<endl;
 cout<<"4.隊列置空"<<endl;
 cout<<"5.獲取隊中元素數(shù)量"<<endl;
 cout<<"6.退出"<<endl;
} 
void function(int num,SeqQueue<int> *sq){
 switch(num){
  int x;
  case 1:
   cin>>x;
   sq->EnQueue(x);
   break;
  case 2:
   sq->getFront(x);
   cout<<x<<endl;
   break;
  case 3:
   sq->DeQueue(x);
   break;
  case 4:
   sq->makeEmpty();
   break;
  case 5:
   x=sq->getSize();
   cout<<x<<endl;
   break; 
  default:
   exit(1);
 }
}
int main(int argc, char** argv) {
 SeqQueue<int> *sq=new SeqQueue<int>;
 int num;
 while(true){
  menu();
  cin>>num;
  function(num,sq);
 } 
 delete sq;
 return 0; 
}

之后是鏈式隊列,實現(xiàn)類代碼和測試代碼如下:

#include <iostream>
using namespace std;
template<class T> 
struct LinkNode{
 T data;
 LinkNode<T> *link;
 LinkNode(T& x,LinkNode<T> *l=NULL){
  data=x;
  link=l;
 }
};
template<class T>
class LinkedQueue{
 protected:
  LinkNode<T> *front,*rear;
 public:
  LinkedQueue(){
   front=rear=NULL;
  }
  ~LinkedQueue(){
   makeEmpty();
  }
  bool enQueue(T& x){
   if(front==NULL)
    front=rear=new LinkNode<T>(x);
   else{
    rear=rear->link=new LinkNode<T>(x);
   }
   return true;
  }
  bool deQueue(T& x){
   if(isEmpty()) return false;
   LinkNode<T> *p=front;
   x=front->data;
   front=front->link;
   delete p;
   return true;
  }
  bool getFront(T& x)const{
   if(isEmpty()) return false;
   x=front->data;
   return true;
  }
  void makeEmpty(){
   LinkNode<T> *p;
   while(front!=NULL){
    p=front;
    front=front->link;
    delete p;
   }
  }
  bool isEmpty()const{
   return (front==NULL)?true:false;
  }
  int getSize()const{
   LinkNode<T> *p;
   int count=0;
   p=front;
   while(p!=NULL){
    count++;
    p=p->link;
   } 
  return count;
  }
}; 
void menu(){
 cout<<"1.入隊"<<endl;
 cout<<"2.獲取隊首元素"<<endl;
 cout<<"3.出隊"<<endl;
 cout<<"4.隊列置空"<<endl;
 cout<<"5.獲取隊中元素數(shù)量"<<endl;
 cout<<"6.退出"<<endl;
} 
void function(int num,LinkedQueue<int> *lq){
 switch(num){
  int x;
  case 1:
   cin>>x;
   lq->enQueue(x);
   break;
  case 2:
   lq->getFront(x);
   cout<<x<<endl;
   break;
  case 3:
   lq->deQueue(x);
   break;
  case 4:
   lq->makeEmpty();
   break;
  case 5:
   x=lq->getSize();
   cout<<x<<endl;
   break; 
  default:
   exit(1);
 }
}
int main(int argc, char** argv) {
 LinkedQueue<int> *lq=new LinkedQueue<int>;
 int num;
 while(true){
  menu();
  cin>>num;
  function(num,lq);
 } 
 delete lq;
 return 0; 
}

以上這篇C++實現(xiàn)循環(huán)隊列和鏈式隊列的示例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言光標旋轉(zhuǎn)與倒計時功能實現(xiàn)示例詳解

    C語言光標旋轉(zhuǎn)與倒計時功能實現(xiàn)示例詳解

    這篇文章主要為大家介紹了C語言實現(xiàn)光標旋轉(zhuǎn)與倒計時功能的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2021-11-11
  • C語言內(nèi)存對齊實例詳解

    C語言內(nèi)存對齊實例詳解

    這篇文章主要介紹了C語言內(nèi)存對齊,包括內(nèi)存對其的基本概念及用法,以及注意事項,并以實例形式加以說明,需要的朋友可以參考下
    2014-09-09
  • C語言用棧實現(xiàn)十進制轉(zhuǎn)換為二進制的方法示例

    C語言用棧實現(xiàn)十進制轉(zhuǎn)換為二進制的方法示例

    這篇文章主要介紹了C語言用棧實現(xiàn)十進制轉(zhuǎn)換為二進制的方法,結(jié)合實例形式分析了C語言棧的定義及進制轉(zhuǎn)換使用技巧,需要的朋友可以參考下
    2017-06-06
  • C++常用的#include頭文件總結(jié)

    C++常用的#include頭文件總結(jié)

    這篇文章主要介紹了C++常用的#include頭文件,對初學(xué)者理解C++程序設(shè)計大有好處的相關(guān)資料
    2014-07-07
  • C++深入分析回顧函數(shù)重載

    C++深入分析回顧函數(shù)重載

    C++ 允許多個函數(shù)擁有相同的名字,只要它們的參數(shù)列表不同就可以,這就是函數(shù)的重載(Function Overloading),借助重載,一個函數(shù)名可以有多種用途
    2022-06-06
  • C語言每日練習(xí)之進制轉(zhuǎn)換

    C語言每日練習(xí)之進制轉(zhuǎn)換

    這篇文章主要介紹了C語言進制轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • 解決VC++編譯報錯error C2248的方案

    解決VC++編譯報錯error C2248的方案

    這篇文章主要介紹了解決VC++編譯報錯error C2248的方案的相關(guān)資料,需要的朋友可以參考下
    2015-11-11
  • 淺談Qt中使用CEF的幾個要點(Windows下)

    淺談Qt中使用CEF的幾個要點(Windows下)

    下面小編就為大家?guī)硪黄獪\談Qt中使用CEF的幾個要點(Windows下)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • C++實現(xiàn)幸運大抽獎(QT版)

    C++實現(xiàn)幸運大抽獎(QT版)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)幸運大抽獎,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C++實現(xiàn)無重復(fù)字符的最長子串

    C++實現(xiàn)無重復(fù)字符的最長子串

    本文主要介紹了C++實現(xiàn)無重復(fù)字符的最長子串,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評論