国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C > 正文

詳解數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言實(shí)現(xiàn)之循環(huán)隊(duì)列

2020-01-26 14:29:42
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文講的是循環(huán)隊(duì)列,首先我們必須明白下面幾個(gè)問(wèn)題

循環(huán)隊(duì)列的基礎(chǔ)知識(shí)

1.循環(huán)隊(duì)列需要幾個(gè)參數(shù)來(lái)確定

循環(huán)隊(duì)列需要2個(gè)參數(shù),front和rear

2.循環(huán)隊(duì)列各個(gè)參數(shù)的含義

(1)隊(duì)列初始化時(shí),front和rear值都為零;

(2)當(dāng)隊(duì)列不為空時(shí),front指向隊(duì)列的第一個(gè)元素,rear指向隊(duì)列最后一個(gè)元素的下一個(gè)位置;

(3)當(dāng)隊(duì)列為空時(shí),front與rear的值相等,但不一定為零;

3.循環(huán)隊(duì)列入隊(duì)的偽算法

(1)把值存在rear所在的位置;

(2)rear=(rear+1)%maxsize ,其中maxsize代表數(shù)組的長(zhǎng)度;

程序代碼:

bool Enqueue(PQUEUE Q, int val) {   if(FullQueue(Q))     return false;   else   {     Q->pBase[Q->rear]=val;     Q->rear=(Q->rear+1)%Q->maxsize;     return true;   } } 

4.循環(huán)隊(duì)列出隊(duì)的偽算法

(1)先保存出隊(duì)的值;

(2)front=(front+1)%maxsize ,其中maxsize代表數(shù)組的長(zhǎng)度;

程序代碼:

bool Dequeue(PQUEUE Q, int *val) {   if(EmptyQueue(Q))   {     return false;   }   else   {     *val=Q->pBase[Q->front];     Q->front=(Q->front+1)%Q->maxsize;     return true;   } } 

5.如何判斷循環(huán)隊(duì)列是否為空

if(front==rear)

隊(duì)列空;

else

  隊(duì)列不空;

bool EmptyQueue(PQUEUE Q) {   if(Q->front==Q->rear)  //判斷是否為空     return true;   else     return false; } 

6.如何判斷循環(huán)隊(duì)列是否為滿

 這個(gè)問(wèn)題比較復(fù)雜,假設(shè)數(shù)組的存數(shù)空間為7,此時(shí)已經(jīng)存放1,a,5,7,22,90六個(gè)元素了,如果在往數(shù)組中添加一個(gè)元素,則rear=front;此時(shí),隊(duì)列滿與隊(duì)列空的判斷條件front=rear相同,這樣的話我們就不能判斷隊(duì)列到底是空還是滿了;

解決這個(gè)問(wèn)題有兩個(gè)辦法:

一是增加一個(gè)參數(shù),用來(lái)記錄數(shù)組中當(dāng)前元素的個(gè)數(shù);

第二個(gè)辦法是,少用一個(gè)存儲(chǔ)空間,也就是數(shù)組的最后一個(gè)存數(shù)空間不用,當(dāng)(rear+1)%maxsiz=front時(shí),隊(duì)列滿;

bool FullQueue(PQUEUE Q) {   if(Q->front==(Q->rear+1)%Q->maxsize)  //判斷循環(huán)鏈表是否滿,留一個(gè)預(yù)留空間不用     return true;   else     return false; } 

附錄:

queue.h文件代碼:

#ifndef __QUEUE_H_ #define __QUEUE_H_ typedef struct queue  {   int *pBase;   int front;  //指向隊(duì)列第一個(gè)元素   int rear;  //指向隊(duì)列最后一個(gè)元素的下一個(gè)元素   int maxsize; //循環(huán)隊(duì)列的最大存儲(chǔ)空間 }QUEUE,*PQUEUE;  void CreateQueue(PQUEUE Q,int maxsize); void TraverseQueue(PQUEUE Q); bool FullQueue(PQUEUE Q); bool EmptyQueue(PQUEUE Q); bool Enqueue(PQUEUE Q, int val); bool Dequeue(PQUEUE Q, int *val); #endif 

queue.c文件代碼:

#include<stdio.h> #include<stdlib.h> #include"malloc.h" #include"queue.h" /*********************************************** Function: Create a empty stack; ************************************************/ void CreateQueue(PQUEUE Q,int maxsize) {   Q->pBase=(int *)malloc(sizeof(int)*maxsize);   if(NULL==Q->pBase)   {     printf("Memory allocation failure");     exit(-1);    //退出程序   }   Q->front=0;     //初始化參數(shù)   Q->rear=0;   Q->maxsize=maxsize; } /*********************************************** Function: Print the stack element; ************************************************/ void TraverseQueue(PQUEUE Q) {   int i=Q->front;   printf("隊(duì)中的元素是:/n");   while(i%Q->maxsize!=Q->rear)   {     printf("%d ",Q->pBase[i]);     i++;   }   printf("/n"); } bool FullQueue(PQUEUE Q) {   if(Q->front==(Q->rear+1)%Q->maxsize)  //判斷循環(huán)鏈表是否滿,留一個(gè)預(yù)留空間不用     return true;   else     return false; } bool EmptyQueue(PQUEUE Q) {   if(Q->front==Q->rear)  //判斷是否為空     return true;   else     return false; } bool Enqueue(PQUEUE Q, int val) {   if(FullQueue(Q))     return false;   else   {     Q->pBase[Q->rear]=val;     Q->rear=(Q->rear+1)%Q->maxsize;     return true;   } }  bool Dequeue(PQUEUE Q, int *val) {   if(EmptyQueue(Q))   {     return false;   }   else   {     *val=Q->pBase[Q->front];     Q->front=(Q->front+1)%Q->maxsize;     return true;   } } 

以上就是C語(yǔ)言實(shí)現(xiàn)循環(huán)隊(duì)列的全部?jī)?nèi)容,對(duì)于學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法的研究有所幫助,有需要的朋友可以參考下。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 志丹县| 额敏县| 拜泉县| 阜宁县| 泊头市| 喜德县| 正定县| 无棣县| 嘉峪关市| 密山市| 衡水市| 页游| 正安县| 开封市| 勃利县| 甘孜县| 台江县| 长垣县| 略阳县| 团风县| 鲜城| 伊春市| 永兴县| 和硕县| 南平市| 疏勒县| 本溪市| 镇江市| 乌什县| 汽车| 金阳县| 瑞昌市| 杂多县| 九寨沟县| 河池市| 阜新市| 德兴市| 南安市| 五华县| 樟树市| 五台县|