佇列 和 迴圈佇列
佇列也是一種運算受限制的線性表,它只允許在表的一端進行插入,而另外一段只允許進行刪除。
允許刪除的一端稱為隊頭(Front);允許刪除的一端稱為隊尾(Rear)。
順序佇列實際上是受限的順序表,和順序表一樣,順序佇列也必須採用一個陣列來存放當前資料元素。
當隊尾(Rear)達到 最大位置時(Maxsize)。 表示此時空間不足,已經不能在入隊了。但是隨著我們出隊Front 向前移動, (0~Front) 的空間是剩餘的。 我們稱這種現象為假上溢。
為了克服假上溢現象:我們講佇列的頭尾連起來形成一個環(迴圈佇列), (即 原來 -1 的位置就是現在 Maxsize -1 的位置)
迴圈佇列每次移動思路:
每次移動 Rear = (Rear +1)%Maxsize;
每次移動Front = (Front +1)%Maxsize;
順序佇列
#include<iostream>
#include<cstdio>
using namespace std;
const int Maxsize=1000;
typedef struct node{
int data[Maxsize];
int Front,Rear;///頭指標和尾指標,分別指向隊頭和隊尾
}*Sq;
void Init_Sequeue(Sq &Q){
Q->Front=-1;
Q->Rear=-1;
}
int Out_Queue(Sq &Q){///獲取隊頭元素
if(Q->Front>=Q->Rear)
cout<<"Queue id NULL"<<endl;
else
{
Q->Front++;
return Q->data[Q->Front];
}
}
void In_Queue(Sq &Q,int e){///入隊
if(Q->Rear>=Maxsize-1)
cout<<"Queue is overfloor"<<endl;
else{
Q->Rear++;
Q->data[Q->Rear]=e;
}
}
int main(){
Sq Q=(Sq)malloc(sizeof(Sq));
Init_Sequeue(Q);
int n,i;
cin>>n;///入隊5個數
for(i=1;i<=n;i++)
In_Queue(Q,i);
cout<<"出隊序列:";
for(i=1;i<=n;i++)
cout<<Out_Queue(Q)<<" ";
return 0;
}
迴圈佇列(順序儲存)
#include<iostream>
#include<cstdio>
using namespace std;
const int Maxsize = 1000;
typedef struct node{
int data[Maxsize];
int Front,Rear;
}*Sq;
void Init_Queue(Sq &Q){///置空迴圈佇列
Q->Front=Maxsize-1;
Q->Rear=Maxsize-1;
}
bool is_Empty(Sq Q){///判空
if(Q->Front==Q->Rear)
return true;
else
return false;
}
void In_Queue(Sq &Q,int e){///入隊
if(Q->Front==((Q->Rear+1)%Maxsize)){///隊以滿,上溢; 在移動 Front 以前判斷之前的尾巴Rear 在移動一個是不是隊為,如果是,這表是滿了
cout<<"Queue is overfloor"<<endl;
}
else{
Q->Rear=(Q->Rear+1)%Maxsize;///
Q->data[Q->Rear]=e;
}
}
int Out_Queue(Sq &Q){///出隊
if(is_Empty(Q))
cout<<"Queue is underfloor"<<endl;
else
Q->Front=(Q->Front+1)%Maxsize;
return Q->data[Q->Front];
}
int GET_head_Queue(Sq Q){///獲取當前對頭元素
if(is_Empty(Q))
{
cout<<"Queue is NULL"<<endl;
}
else{
int id=(Q->Front+1)%Maxsize;
return Q->data[id];
}
}
int main()
{
Sq Q=(Sq)malloc(sizeof(Sq));
Init_Queue(Q);
int n,i;
cin>>n;
for(i=1;i<=n;i++)
In_Queue(Q,i);
cout<<"獲取當前隊頭元素:"<<GET_head_Queue(Q)<<endl;
cout<<"依次出隊:"<<endl;
for(i=1;i<=n;i++)
cout<<Out_Queue(Q)<<" ";
cout<<endl;
return 0;
}
相關文章
- 佇列 手算到機算 入門 佇列 迴圈佇列佇列
- LeetCode 迴圈佇列LeetCode佇列
- 佇列的一種實現:迴圈佇列佇列
- Java版-資料結構-佇列(迴圈佇列)Java資料結構佇列
- 佇列的順序儲存--迴圈佇列的建立佇列
- 靜態佇列,迴圈陣列實現佇列陣列
- 迴圈佇列C++實現佇列C++
- 事件迴圈與任務佇列事件佇列
- 手擼MQ訊息佇列——迴圈陣列MQ佇列陣列
- Throwing cards away I(queue迴圈佇列)佇列
- c/c++線性迴圈佇列C++佇列
- node事件迴圈和訊息佇列簡單分析事件佇列
- 自定義單連結串列佇列的基本介面函式(非迴圈佇列)佇列函式
- 順序迴圈佇列的介面設計佇列
- 迴圈佇列的實現及細節佇列
- 佇列、阻塞佇列佇列
- 資料結構-迴圈佇列(Python實現)資料結構佇列Python
- 資料結構——迴圈佇列PTA習題資料結構佇列
- 【小白學演算法】3. 迴圈佇列演算法佇列
- 07-主佇列和全域性佇列佇列
- 佇列-單端佇列佇列
- LeetCode題解:641. 設計迴圈雙端佇列,使用佇列,JavaScript,詳細註釋LeetCode佇列JavaScript
- 棧和佇列佇列
- 【佇列】【懶排序】佇列Q佇列排序
- 陣列模擬佇列 以及佇列的複用(環形佇列)陣列佇列
- 單調佇列雙端佇列佇列
- 圖解--佇列、併發佇列圖解佇列
- 基於迴圈佇列的BFS的原理及實現佇列
- 【資料結構】迴圈佇列 C語言實現資料結構佇列C語言
- Android Handler機制之迴圈訊息佇列的退出Android佇列
- 佇列佇列
- Kafka 延時佇列&重試佇列Kafka佇列
- RabbitMQ 訊息佇列之佇列模型MQ佇列模型
- netcore下RabbitMQ佇列、死信佇列、延時佇列及小應用NetCoreMQ佇列
- Java版-資料結構-佇列(陣列佇列)Java資料結構佇列陣列
- 深入分析Node.js事件迴圈與訊息佇列Node.js事件佇列
- 稀疏陣列、佇列陣列佇列
- synchronized 中的同步佇列與等待佇列synchronized佇列