a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

循環(huán)隊列詳解及隊列的順序表示和實現(xiàn)

2020-01-26 14:19:48
字體:
供稿:網(wǎng)友

循環(huán)隊列――隊列的順序表示和實現(xiàn)

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

相同點:

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

不同點:

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

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

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

1.另設(shè)一個標(biāo)志位以區(qū)分隊列是空還是滿

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

第二種方法的實現(xiàn):

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

循環(huán)隊列操作及指針變化情況如下圖所示:

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

代碼實現(xiàn):

循環(huán)隊列和順序隊列的頭文件是一樣的

/* 循環(huán)隊列的接口定義頭文件 */#define true 1#define false 0/* 隊的最大長度 */#define MAX_QUEUE_SIZE 6/* 隊列的數(shù)據(jù)類型 */typedef int datatype;/* 靜態(tài)鏈的數(shù)據(jù)結(jié)構(gòu) */typedef struct queue{  datatype sp_queue_array[MAX_QUEUE_SIZE];  /* 隊頭 */  int front;  /* 隊尾 */  int rear;}cir_queue;/* 靜態(tài)順序鏈的接口定義 *//* 靜態(tài)鏈的初始化 */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);/* 循環(huán)隊列的接口實現(xiàn)文件 */#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));}

運行截圖:

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

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

圖片精選

主站蜘蛛池模板: 一级黄色毛片a | 成人黄色一级网站 | a天堂在线| 91污视频软件| 国产精品美女久久久久久久久久久 | 国产一区二区三区高清 | 日韩视频精品 | www.久久久 | 日韩精品免费在线观看 | 日韩在线视频二区 | 亚洲精品日韩av | 91国自产区一二三区 | 成人精品 | 国产91亚洲精品久久久 | 一区二区日韩精品 | 久久精品店 | 国产成人午夜 | 亚洲成人久久久 | 亚洲精品免费观看视频 | 亚洲视频一区二区三区 | 日韩精品无玛区免费专区又长又大 | 久久久精品久久久久 | 午夜精品福利一区二区三区蜜桃 | 美女视频一区二区三区 | 黄色av网站在线免费观看 | 国产精品久久久久久久久久久久久久久久久 | 久久精品中文字幕 | 亚洲精品美女在线观看 | 国产九九精品视频 | 色综合天天天天做夜夜夜夜做 | 国产精品美女在线观看直播 | 亚洲a人| 中文字幕精品三级久久久 | 日本国产一区二区三区 | 国产免费一区二区 | 久久久综合av | 亚洲第一av | 国产成人激情 | www.久久久 | 国产精品视频自拍 | 免费黄色在线观看 |