亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

循環隊列詳解及隊列的順序表示和實現

2020-01-26 14:19:48
字體:
來源:轉載
供稿:網友

循環隊列――隊列的順序表示和實現

前面分析順序隊的時候,我們知道,順序隊存在”假溢出”的問題,這個問題有時會造成很大的內存浪費,循環隊列就是為了解決這個問題而提出地一個很巧妙的辦法.循環隊列和順序隊列的主要區別在于:循環隊列將順序隊列臆造成一個環狀空間.在操作上這種異同體現在:

相同點:

在順序隊列和循環隊列中,進行出隊、入隊操作時,隊首、隊尾指針都要加 1 ,朝前移動。

不同點:

1. 在循環隊列中當隊首、隊尾指針指向向量上界(MAX_QUEUE_SIZE-1) 時,其加1 操作的結果是指向向量的下界 0 。而在順序隊列中,說明隊已滿,若此時采用的是動態順序鏈,可以增加申請內存.若是采用靜態順序鏈,只能退出程序.

2. 順序隊列中q.front = q.rear 表示隊空,q.rear = MAX_QUEUE_SIZE表示隊滿.而在循環隊列中.front=q.rear表示隊空,而無法用.rear=MAX_QUEUE_SIZE表示隊滿.

判斷循環隊列隊滿的兩種方法(本文采用第二種方法):

1.另設一個標志位以區分隊列是空還是滿

2.少用一個元素空間,約定以”隊列頭指針在隊列尾指針的下一位置上”,作為隊列呈滿狀態的標志.

第二種方法的實現:

◆ rear 所指的單元始終為空。
◆ 循環隊列為空: front=rear 。
◆ 循環隊列滿: (rear+1)%MAX_QUEUE_SIZE=front 。

循環隊列操作及指針變化情況如下圖所示:

循環隊列雖然可以解決”假溢出”問題,但是它不能通過動態分配的一維數組來實現,所以在實現循環隊列之前,一定要為它設定一個最大隊列長度.如果無法預估所需的最大隊列長度,只能采用來鏈表實現.

代碼實現:

循環隊列和順序隊列的頭文件是一樣的

/* 循環隊列的接口定義頭文件 */#define true 1#define false 0/* 隊的最大長度 */#define MAX_QUEUE_SIZE 6/* 隊列的數據類型 */typedef int datatype;/* 靜態鏈的數據結構 */typedef struct queue{  datatype sp_queue_array[MAX_QUEUE_SIZE];  /* 隊頭 */  int front;  /* 隊尾 */  int rear;}cir_queue;/* 靜態順序鏈的接口定義 *//* 靜態鏈的初始化 */cir_queue queue_init();/* 判斷隊列是否為空,若為空 * 返回true * 否則返回false*/int queue_empty(cir_queue q);/* 插入元素e為隊q的隊尾新元素  * 插入成功返回true * 隊滿返回false*/int queue_en(cir_queue *q, datatype e);/* 隊頭元素出隊 * 用e返回出隊元素,并返回true * 若隊空返回false*/int queue_de(cir_queue *q, datatype *e);/* 清空隊 */void queue_clear(cir_queue *q);/* 獲得隊頭元素 * 隊列非空,用e返回隊頭元素,并返回true * 否則返回false*/int get_front(cir_queue, datatype *e );/* 獲得隊長 */int queue_len(cir_queue q);/* 遍歷隊 */void queue_traverse(cir_queue q, void(*visit)(cir_queue q));void visit(cir_queue s);/* 循環隊列的接口實現文件 */#include<stdio.h>#include<stdlib.h>#include"cir_queue.h"cir_queue queue_init(){  cir_queue q;  q.front = q. rear = 0;  return q;}int queue_empty(cir_queue q){  return q.front == q.rear;}int queue_en(cir_queue *q, datatype e){  /* 判斷隊是否已滿 */  if (q -> front == (q -> rear + 1) % MAX_QUEUE_SIZE)    return false;  /* 入隊 */  q -> sp_queue_array[q -> rear] = e;  q -> rear = (q -> rear + 1) % MAX_QUEUE_SIZE;  return true;}int queue_de(cir_queue *q, datatype *e){  /* 判斷隊列是否為空 */  if(q -> front == q -> rear)    return false;  /* 用e返回隊頭元素 */  *e = q -> sp_queue_array[q -> front];  q -> front = (q -> front + 1 ) % MAX_QUEUE_SIZE;  return true;}void queue_clear(cir_queue *q){  q -> front = q -> rear = 0;}int get_front(cir_queue q, datatype *e){  /* 判斷隊列是否為空 */  if (q.front == q.rear)    return false;  *e = q.sp_queue_array[q.front];  return true;}int queue_len(cir_queue q){  /* 若front > rear */  if(q.front > q.rear)    return (q.rear + MAX_QUEUE_SIZE - q.front);  else    return (q.rear - q.front);}void queue_traverse(cir_queue q, void(*visit)(cir_queue q)){  visit(q);}void visit(cir_queue q){  while(q.front != q.rear)  {    printf("%d ",q.sp_queue_array[q.front]);    q.front = (q.front + 1) % MAX_QUEUE_SIZE;  }}int main(){   cir_queue q = queue_init();  queue_en(&q, 1);  queue_en(&q, 2);  queue_en(&q, 3);  queue_en(&q, 4);  queue_en(&q, 5);  printf("此時隊長:length=%d/n", queue_len(q));  queue_traverse(q, visit);  printf("元素6再入隊/n");  queue_en(&q, 6);  queue_traverse(q, visit);  datatype *x = (datatype *)malloc(sizeof(*x));  queue_de(&q,x);  printf("出隊:%d,此時隊長=%d/n", *x, queue_len(q));  printf("元素6再入隊/n");  queue_en(&q, 6);  printf("length=%d/n", queue_len(q));  queue_traverse(q,visit);  datatype *e = (datatype *)malloc(sizeof(*e));  queue_de(&q,e);  printf("queue_de(),e=%d length=%d/n", *e,  queue_len(q));  queue_traverse(q, visit);  queue_clear(&q);  queue_traverse(q, visit);  printf("length:%d/n", queue_len(q));}

運行截圖:

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品福利在线观看| 奇米影视亚洲狠狠色| 亚洲欧美国产精品| 亚洲精品一区久久久久久| 欧美日韩美女在线观看| 青青在线视频一区二区三区| 色综合久久天天综线观看| 日韩大片免费观看视频播放| 91在线精品播放| 久久精品国产亚洲7777| 奇门遁甲1982国语版免费观看高清| 精品国产一区二区在线| 亚洲国产美女精品久久久久∴| 91禁外国网站| 亚洲精品国产综合区久久久久久久| 久久精品视频在线播放| 久久久久免费精品国产| 欧美亚洲第一区| 国产精品成人品| 亚洲男人天堂古典| 中国日韩欧美久久久久久久久| 亚洲精品国产品国语在线| 成人日韩在线电影| 午夜精品久久久久久99热| 欧美激情久久久久久| 久久这里有精品| 国产精品丝袜白浆摸在线| 亚洲国产中文字幕在线观看| 国产成+人+综合+亚洲欧洲| 久久精品美女视频网站| 黄色精品一区二区| 欧美亚洲第一区| 91网站在线免费观看| 人人澡人人澡人人看欧美| 久久精品99无色码中文字幕| 18性欧美xxxⅹ性满足| 国产精品国内视频| 国产精品一区二区久久久久| 91精品国产高清| 国内精品一区二区三区| 国产精品18久久久久久麻辣| 亚洲欧美日韩精品久久亚洲区| 一级做a爰片久久毛片美女图片| 91免费在线视频网站| 亚洲偷熟乱区亚洲香蕉av| 亚洲在线观看视频网站| 日韩大胆人体377p| 亚洲国产精品久久91精品| 国产不卡精品视男人的天堂| 亚洲成色777777在线观看影院| 国产91在线播放九色快色| 欧美日韩精品在线视频| 亚洲精品久久久久久下一站| 欧美午夜精品伦理| 精品免费在线视频| 亚洲福利视频久久| 影音先锋欧美精品| 亚洲美女精品成人在线视频| 亚洲夜晚福利在线观看| 亚洲电影中文字幕| 日韩电影在线观看永久视频免费网站| 国产成人一区三区| 国产精品丝袜一区二区三区| 欧美亚洲成人精品| 91丝袜美腿美女视频网站| 91av视频在线免费观看| 国产免费一区二区三区在线观看| 538国产精品一区二区免费视频| 日韩欧美在线一区| 欧美日韩国产精品一区二区不卡中文| 亚洲国产精品久久久久秋霞不卡| 日韩精品在线免费观看视频| 国产精品久久久久久久久久尿| 欧洲美女免费图片一区| 91九色单男在线观看| 成年无码av片在线| 日韩精品日韩在线观看| 亚洲欧美日韩一区在线| 亚洲一区二区黄| 在线观看欧美日韩国产| 日韩免费中文字幕| 久久久久久久久久久久av| 最新国产精品亚洲| 亚洲片在线观看| 国产精品91久久| 91网站免费观看| 亚洲国产精品美女| 国产精品免费在线免费| 国内久久久精品| 国产日韩欧美在线| 91国产美女视频| 日本久久久久久| 日韩黄色在线免费观看| 亚洲va欧美va在线观看| 欧美性开放视频| 亚洲综合精品伊人久久| 欧美日韩亚洲系列| 久久伊人色综合| 美女福利精品视频| 欧美大片免费观看| 久久久国产精品x99av| 国产成人黄色av| 欧美日韩一区二区三区在线免费观看| 欧美富婆性猛交| 亚洲精品一区二三区不卡| 成人欧美在线视频| 国产成人免费91av在线| 最近2019年日本中文免费字幕| 欧美性xxxxx极品| 国产日本欧美视频| 日韩欧美a级成人黄色| 国产精品黄色av| 日av在线播放中文不卡| 综合国产在线视频| 国产成人涩涩涩视频在线观看| 成人午夜一级二级三级| 日韩欧美精品网站| 亚洲999一在线观看www| 国产aⅴ夜夜欢一区二区三区| 国产极品jizzhd欧美| 欧美日韩激情视频| 欧美综合激情网| 俺去啦;欧美日韩| 久久亚洲精品一区二区| 精品久久久久久久久久久久| 91午夜理伦私人影院| 色偷偷偷综合中文字幕;dd| 日韩高清a**址| 蜜月aⅴ免费一区二区三区| 成人欧美在线视频| 欧美精品久久一区二区| 亚洲国产精品久久精品怡红院| 高跟丝袜一区二区三区| 久久综合88中文色鬼| 欧美一区视频在线| 精品久久香蕉国产线看观看gif| 欧美视频专区一二在线观看| 国产精品96久久久久久| 亚洲国产天堂久久综合网| 中文字幕日本欧美| 中文字幕自拍vr一区二区三区| 亚洲精品在线观看www| 国产精品一区专区欧美日韩| 91精品国产自产在线| 精品国产一区二区三区久久狼黑人| 成人在线中文字幕| 亚洲精品99999| 色婷婷亚洲mv天堂mv在影片| 亚洲第一黄色网| 亚洲成年人在线| 欧美国产日韩免费| 久久精品99国产精品酒店日本| 国产精品三级美女白浆呻吟| 精品国产福利视频| 欧美一级片免费在线| 亲爱的老师9免费观看全集电视剧| 亚洲国产婷婷香蕉久久久久久| 麻豆一区二区在线观看| 亚洲精品videossex少妇| 亚洲无av在线中文字幕| 精品成人国产在线观看男人呻吟| 久久久久久久久久久久久久久久久久av| 韩日欧美一区二区| 精品国产91乱高清在线观看|