日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构-队列之循环队列

發布時間:2023/12/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构-队列之循环队列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

將順序隊列臆造為一個環狀的空間,即把存儲隊列元素的表從邏輯上看成一個環,稱為循環隊列。
當隊首指針q.front=MaxSize-1后,再前進一個位置就自動歸0,可以通過除法取余運算(%)來實現。

初始時:q.front = q.rear=0 隊首指針+1:q.front = (q.front + 1) % MaxSize; 隊尾指針+1:q.rear = (q.rear + 1) % MaxSize; 隊列長度:(q.rear+MaxSize-q.front)%MaxSize

循環隊列的入隊和出隊示意圖(摘抄):

那么,循環隊列空和隊滿的條件是什么呢?顯然,隊空和隊滿時都存在q.front=q.rear,所以為了區分隊空還是對滿有三種處理方式:
1.犧牲一個單元來區分隊空和隊滿,入隊時少用一個隊列單元,這是一種較為普遍的做法,約定“隊頭指針在隊尾指針的下一位置作為隊滿的標志”,如圖3-7(d2).

隊滿條件:(q.rear+1)%MaxSize == q.front. 隊空條件仍為:q.front==q.rear. 隊中元素個數:(q.rear-q.front+MaxSize)%MaxSize

2.類型中增設表示元素個數的數據成員,這樣,則隊空的條件為q.size==0;隊滿的條件為q.size==MaxSize,這兩種情況都有q.front=q.rear

(個人感覺這種做法的弊端就是需要多引用一個成員,優點就是操作瞬間變得簡單了很多有木有)

以下為代碼的簡單示例:

//隊列之循環隊列 #include "stdafx.h"#define ElementType int #define MaxSize 10 typedef struct {ElementType data[MaxSize];int front, rear;//隊頭指針和隊尾指針int size;//數據成員數量 }SeqQueue;/* 初始化空隊列 */ void InitQueue(SeqQueue &q) {q.front = q.rear = 0;q.size = 0; } /* 判斷隊列是否為空 */ bool QueueEmpty(SeqQueue q) {if (q.size == 0) {return true;}return false; } /* 入隊操作 1.判斷隊列是否已滿 2.隊尾指針+1,因為是循環隊列,所以通過除以MaxSize取模的方式處理,當隊尾指針=MaxSize-1后,再前進一個位置自動歸0 */ bool EnQueue(SeqQueue &q,ElementType e) {//判斷隊列是否已滿if (q.size == MaxSize) {return false;}q.rear = (q.rear + 1) % MaxSize;q.data[q.rear] = e;q.size++;return true; } /* 出隊操作 1.判斷隊列是否為空 2.隊首指針+1,因為是循環隊列,所以通過除以MaxSize取模的方式處理,當隊首指針=MaxSize-1后,再前進一個位置自動歸0 */ ElementType DeQueue(SeqQueue &q) {//判斷隊列是否為空if (q.size == 0) {return NULL;}ElementType e = q.data[q.front];q.front = (q.front + 1) % MaxSize;q.size--;return e; }

?

總結

以上是生活随笔為你收集整理的数据结构-队列之循环队列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。