最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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++之static關(guān)鍵字

    一文讀懂c++之static關(guān)鍵字

    這篇文章主要介紹了c++之static關(guān)鍵字的的相關(guān)資料,文中示例代碼非常詳細,供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • C語言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)二叉樹堆

    C語言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)二叉樹堆

    這篇文章主要為大家介紹了C語言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)二叉樹堆的圖文示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • C語言基礎(chǔ)知識點解析(extern,static,typedef,const)

    C語言基礎(chǔ)知識點解析(extern,static,typedef,const)

    本篇文章是對C語言基礎(chǔ)知識點(extern,static,typedef,const)的用法進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-10-10
  • C++實現(xiàn)萬年歷功能

    C++實現(xiàn)萬年歷功能

    這篇文章主要為大家詳細介紹了C++實現(xiàn)萬年歷功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 使用C語言求二叉樹結(jié)點的最低公共祖先的方法

    使用C語言求二叉樹結(jié)點的最低公共祖先的方法

    這篇文章主要介紹了使用C語言求二叉樹結(jié)點的最低公共祖先的方法,文中還給出了ACM的練習(xí)題目,需要的朋友可以參考下
    2015-08-08
  • 用C語言判斷字符是否為空白字符或特殊字符的方法

    用C語言判斷字符是否為空白字符或特殊字符的方法

    這篇文章主要介紹了用C語言判斷字符是否為空白字符或特殊字符的方法,分別為isspace()函數(shù)的使用和ispunct()函數(shù)的使用,需要的朋友可以參考下
    2015-08-08
  • C語言指針詳解

    C語言指針詳解

    這篇文章非常詳細的講解了C語言中指針的概念,包含多種方法,多種定義,全面的說明了C語言的特性
    2021-06-06
  • C++?STL容器適配器使用指南

    C++?STL容器適配器使用指南

    C++?STL(標準模板庫)是一套功能強大的?C++?模板類,提供了通用的模板類和函數(shù),這些模板類和函數(shù)可以實現(xiàn)多種流行和常用的算法和數(shù)據(jù)結(jié)構(gòu),如向量、鏈表、隊列、棧,今天我們來探究一下stl容器適配器的使用吧
    2021-11-11
  • Qt?QString的使用實現(xiàn)

    Qt?QString的使用實現(xiàn)

    本文主要介紹了Qt?QString的使用實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • OJ中G++和C++的區(qū)別

    OJ中G++和C++的區(qū)別

    今天小編就為大家分享一篇關(guān)于OJ中G++和C++的區(qū)別,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10

最新評論

淮安市| 万盛区| 阿荣旗| 罗定市| 甘南县| 德安县| 嵊泗县| 赫章县| 崇信县| 怀安县| 长春市| 和平区| 岐山县| 如皋市| 积石山| 洛川县| 沙洋县| 南京市| 香格里拉县| 南部县| 宿州市| 尼木县| 正蓝旗| 保康县| 买车| 安达市| 巴塘县| 土默特左旗| 紫金县| 保亭| 灵丘县| 繁昌县| 丹巴县| 青河县| 五河县| 达州市| 勐海县| 甘德县| 南木林县| 涟源市| 民权县|