1. 程式人生 > >資料結構—順序迴圈佇列(附程式碼實現)

資料結構—順序迴圈佇列(附程式碼實現)

佇列

概念
佇列也是一種特殊的線性表。不過,線性表允許在任何位置插入和刪除,而佇列只允許在隊尾插入,在隊頭刪除,這樣它就具有先進先出的性質

重點

順序迴圈佇列的假溢位問題
由於隊尾指標rear的值和隊頭front的值不能由所定義儲存空間的最大值自動轉為所定義儲存空間的最小值而產生

為了解決這個問題,有三種方法可以選擇
1 少用一個儲存單元
如果少用一個儲存空間,則以隊尾指標加1等於隊頭指標為佇列滿的判斷條件,那麼此時判斷佇列滿的條件為
(rear+1)%Maxsize ==front
佇列空的判斷條件為:
rear=front;
(2)設定一個標誌位

設定標誌位為tag,初始時置tag=0;每當如佇列操作成功,就置tag=1;每當出佇列操作成功,就置tag=0.
此時佇列空的判斷條件為
rear==front && tag=0
佇列滿的條件為
rear==front && tag=1
(3)設定一個計數器


設計數器為count,初始時置count=0;每當如佇列成功,就使count++;每當出佇列成功,那就讓count–。這樣,計數器不僅具有計數功能,而且還具有標誌位一樣的標誌作用,則此時佇列空的判斷條件為:count==0
佇列滿的條件為:
count>0 &&rear==front;
還可以是:
count=Maxsize;
附程式碼

#include<stdio.h>
#include<stdlib.h>
#define Maxsize 100

typedef int DataType;

typedef
struct //定義一個結構體 { DataType queue[Maxsize]; int rear; //隊尾指標 int front; //隊頭指標 int count; //計數器 }SeqQueue; void SeqQueueInitiate(SeqCQueue *Q)//佇列初始化 { Q->rear=0; Q->front=0; Q->count=0; } int QueueNotEmpty(SeqQueue Q)//佇列判空 { if(Q.count!=0) return
1; else return 0; } int QueueAppend(SeqQueue *Q,DataType x)//入佇列 { if(Q->count >0 && Q->rear ==Q->front) { printf("佇列已滿無法插入"); return 0; } else { Q->queue[Q->rear]=x;//將x插入隊尾 Q->rear=(Q->rear +1)%Maxsize; Q->count++; //計數器加1 return 1; } } int QueueDelete(SeqQueue *Q,DataType *d)//出佇列 { if(Q->count ==0) { printf("佇列已空\n"); return 0; } else { *d=Q->queue[Q->front];//用指標d儲存要刪除的元素 Q->front=(Q->front+1)%Maxsize; //隊頭元素都給前移一位 Q->count--; return 1; } } int QueueGet(SeqQueue Q,DataType *d)//取資料 { if(Q.count ==0) { printf("佇列已空無資料可取!\n"); return 0; } else { *d=Q.queue[Q.front]; return 1; } }

相關推薦

資料結構順序迴圈佇列程式碼實現

佇列 概念 佇列也是一種特殊的線性表。不過,線性表允許在任何位置插入和刪除,而佇列只允許在隊尾插入,在隊頭刪除,這樣它就具有先進先出的性質 重點 順序迴圈佇列的假溢位問題 由於隊尾

資料結構迴圈佇列C語言實現

生活中有很多佇列的影子,比如打飯排隊,買火車票排隊問題等,可以說與時間相關的問題,一般都會涉及到佇列問題;從生活中,可以抽象出佇列的概念,佇列就是一個能夠實現“先進先出”的儲存結構。佇列分為鏈式佇列和靜態佇列;靜態佇列一般用陣列來實現,但此時的佇列必須是迴圈佇列,否則

資料結構——順序表操作C語言實現

//順序表list #include"stdio.h" #define maxsize 15 typedef struct{ int a[maxsize]; int size; }list; //建立 void create(lis

資料結構1--線性表java程式碼實現線性表的順序儲存

1.資料結構的概念      資料:資訊載體,計算機處理的物件的總稱      資料元素:也稱結點,組成資料的基本單位      資料項:資料項是資料的最小單位     &n

資料結構迴圈佇列SeqQueue原始碼

SeqQueue.h檔案#pragma once #include<assert.h> #include<iostream> #define defaultSize 20 template<class T> class SeqQueu

資料結構系列——字尾樹Java實現程式碼

字尾樹,說的通俗點就是將一個字串所有的字尾按照字首樹(Trie樹,可參考此篇文章)的形式組織成一棵樹。 什麼是字尾樹 舉例:“banana\0”,其中 “\0” 作為文字結束符號,該字串所有的字尾如下: banana\0 anana\0 na

資料結構迴圈佇列設定一個標誌域後的入佇列和出佇列的演算法

如果希望迴圈佇列中的元素都能得到利用,則需設定一個標誌域tag,並以tag的值為0或1來區分,尾指標和頭指標值相同時的佇列狀態是"空"還是"滿"。試編寫與此結構相應的入佇列和出佇列的演算法。 本題的迴圈佇列CTagQu

資料結構嚴蔚敏之五——迴圈佇列c語言實現

在這裡我先強調幾點概念: 1、在非空佇列中,頭指標始終指向佇列頭元素,而尾指標始終指向佇列尾元素的下一個位置。 2、在單佇列中我們判斷佇列是否為空的條件是:Q.front==Q.rear;而在迴圈佇列

資料結構】4.1串的基本操作程式碼實現

串的基本操作有: 賦值 連線 比較 清空 求子串 具體程式碼如下 #include <stdio.h> #include<malloc.h> #include<stdlib.h> #include<stri

資料結構2--線性表java程式碼實現線性表的鏈式儲存

1.鏈式儲存       2.分析       每個節點為一個物件,該物件包含資料域和指標域        整條單鏈表為一個物件,他和節點物件進行組合。  3.

JAVA BIO,NIO,AIO詳解程式碼實現

這幾天在看面試的東西,可能是自己比較笨,花了快兩天的時間才理清楚。特此記錄一下。 首先我們要理解的一個很重要概念是,客戶端連線和傳送資料是分開的,連線不代表立馬會傳輸資料。 說說BIO,NIO,AIO到底是什麼東西 BIO:同步堵塞 NIO:非同步堵塞 AIO:非同步非堵塞

機器學習:貝葉斯網淺析程式碼實現

貝葉斯網的目的是為了從已知屬性推測其他未知屬性的取值。貝葉斯網是描述屬性間依賴關係的有向無環圖,並使用概率分佈表描述屬性的聯合概率分佈。如下圖(A指向B表示B依賴於A):貝葉斯網由結構G和引數Θ組成,即B=<G,Θ>。Θ定量描述了屬性間的依賴關係,即Θ包含了每個屬

資料結構—二叉樹C語言實現

以下所有內容來自網易雲課堂——資料結構(小甲魚版) 對於樹來說,一旦可以指明他的分支數,那麼就可以用連結串列來實現了 二叉樹是應用廣泛的樹,因為現實世界大部分模型都只包含0,1這兩種情況,非常適合用二叉樹 如下: typedef struct BiNode {

10 大深度學習架構:計算機視覺優秀從業者必備程式碼實現

近日,Faizan Shaikh 在 Analytics Vidhya 發表了一篇題為《10 Advanced Deep Learning Architectures Data Scientists Should Know!》的文章,總結了計算機視覺領域已經成效卓著的 10

資料結構學習筆記-串C語言實現

串由零個或多個字元組成,說白了就是字串。串的儲存方式相對於線性表來講有些不同,他分為以下幾種:順序儲存、堆分配儲存、鏈式儲存。順序儲存通常在陣列中的頭元素存放字串長度。堆分配儲存通常會動態分配空間。鏈式儲存分為兩種,一種是每個節點存放一個字元(比較浪費空間),另一種則是每個節

資料結構 簡單選擇排序C語言實現

       選擇排序的基本思想:每一趟在n-i+1(i=1,2,3,…,n-1)個記錄中選取關鍵字最小的記錄作為有序序列中第i個記錄。 演算法思想       第一趟簡單選擇排序時,從第一個記錄開始,通過n-1 次關鍵字比較,從n 個記錄中選出關鍵字最小的記錄,並和第

機器學習:神經網路-多層前饋神經網路淺析程式碼實現

M-P神經元模型神經網路中最基本的組成成分:神經元模型。如下圖是一個典型的“M-P神經元模型”:上圖中,神經元接收到n個其他神經元傳遞過來的輸入訊號,這些訊號通過權重的連線進行傳遞,神經元接收到的總輸入值與神經元的閾值進行比較,並通過“啟用函式”處理產生神經元輸出。常用S函式

資料結構】3.5迴圈佇列實現程式碼

迴圈佇列節約了一定的空間,仍然用陣列實現。 要注意的是 rear是隊尾元素下一個單元的下標 front == rear時佇列為空 人為地讓一個儲存單元不儲存任何資訊,判滿條件為 (rear+1+MAXSIZE)%MAXSIZE == front 之所以能成

資料結構4--佇列java程式碼實現佇列的鏈式儲存

1.什麼是佇列?      佇列也叫隊,時允許在一段進行擦汗如另一端進行刪除的運算受限的線性表。區別佇列和棧:棧時先進後出,佇列時先進先出。                 &nbs