C語(yǔ)言實(shí)現(xiàn)順序循環(huán)隊(duì)列實(shí)例
一、隊(duì)列和循環(huán)隊(duì)列基本概念
隊(duì)列:

和棧相反,隊(duì)列是一種先進(jìn)先出(FIFO)的線性表。只允許在一端插入,在另一端刪除。
允許插入的叫"隊(duì)尾"(rear),允許刪除的叫"隊(duì)頭"(front)。
入隊(duì)操作:L->rear++; L->data[L->rear]=x;(需要入隊(duì)的元素)
出隊(duì)操作:L->front++; x=L->data[L->front];
求隊(duì)長(zhǎng):隊(duì)長(zhǎng)=(L->rear)-(L->front);
隊(duì)空:L->rear==L->front==-1;
隊(duì)滿:隊(duì)長(zhǎng)=max
使用場(chǎng)景:一切具備先來(lái)后到的任務(wù)場(chǎng)景
循環(huán)隊(duì)列:

和隊(duì)列類似,只不過(guò)隊(duì)頭和隊(duì)尾相連,解決了隊(duì)列的假溢出現(xiàn)象(隊(duì)尾指針達(dá)到申請(qǐng)空間的最大時(shí),系統(tǒng)會(huì)認(rèn)定空間滿,但是隊(duì)頭指針如果不為-1則就是假溢出)。
入隊(duì):L->rear==(L->rear+1)%max;
出隊(duì):L->front==(L->front+1)%max;
隊(duì)滿:由圖可知 隊(duì)滿和隊(duì)空條件重復(fù),所以為了避免這一情況現(xiàn)如今有兩種方法:1.少用一個(gè)元素空間,也就是說(shuō)front指針在定義時(shí)指向0的位置,這樣才能使front和rear之間空出一個(gè)元素空間。2.這個(gè)方法比較容易理解,就是定義一個(gè)Num值來(lái)記錄元素個(gè)數(shù),num==0時(shí)則隊(duì)空,num==max時(shí)則隊(duì)滿。
具體操作:(L->rear+1)%max==front; num==max;
隊(duì)空:L->rear==L->front;
隊(duì)長(zhǎng):分兩種情況:1.頭指針在尾指針之后:按普通隊(duì)列求法。2.頭指針在尾指針之前:隊(duì)長(zhǎng)=L->rear+(max-(L->front));
二、代碼實(shí)操
圖示:

具體代碼:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define ture 1
#define false 0
#define max 5
typedef struct {
int data[max];
int front,rear;
}cteam,*team;
static int num=0; //全局變量 num
//初始隊(duì)列
int Initteam(team &L){
L=(cteam *)malloc(sizeof(cteam));
if(L==NULL){
printf("申請(qǐng)空間失??!");
return false;
}
L->front=L->rear=-1;
return true;
}
//入隊(duì)
int pushteam(team &L,int x){
if(num==max){
printf("隊(duì)滿");
return false;
}else{
L->rear=(L->rear+1)%max; //rear始終在0-10中循環(huán)
L->data[L->rear]=x;
num++;
return true;
}
}
//出隊(duì)
int popteam(team &L,int &x){
if(num==0){
printf("隊(duì)空!");
return false;
}else{
L->front=(L->front+1)%max; //front始終在0-10中循環(huán)
x=L->data[L->front];
num--;
printf("\n%d出隊(duì)\n",x);
return x;
}
}
//遍歷隊(duì)
void printteam(team L){
int p;
p=L->front+1;
if(L->front<L->rear){
while(p<=L->rear){
printf("%d ",L->data[p]);
p++;}
}else{
while((p-1)!=L->rear){
printf("%d ",L->data[p]);
p=(p+1)%max;
}
}
}
//求隊(duì)長(zhǎng)
int teamlength(team L){
int p;
if(L->front<L->rear){
p=(L->rear)-(L->front); //當(dāng)隊(duì)列正常時(shí)
}else{
p=L->rear+(max-(L->front)); //當(dāng)隊(duì)列開(kāi)始循環(huán)時(shí)
}
printf("\n隊(duì)長(zhǎng)為:%d",p);
}
//取隊(duì)頭元素
int gettop(team L){
if(L->front==L->rear){
printf("隊(duì)空!");
return false;
}else{
int t=L->data[L->front+1];
return t;
}
}
/*
pushteam:入隊(duì)函數(shù) popteam:出隊(duì)函數(shù)
printteam:遍歷函數(shù) gettop:取隊(duì)頭函數(shù)
Initteam:初始化函數(shù) teamlength:求隊(duì)長(zhǎng)函數(shù)
*/
int main(){
team s;
int w;
Initteam(s);
//1-3進(jìn)隊(duì)列
pushteam(s,1);
pushteam(s,2);
pushteam(s,3);
printf("------1-3進(jìn)隊(duì)列后----------\n");
printf("此時(shí)隊(duì)列為:");
printteam(s);
popteam(s,w);
popteam(s,w);
printf("此時(shí)隊(duì)列為:");
printteam(s);
printf("\n------4-6進(jìn)隊(duì)列后----------\n");
pushteam(s,4);
pushteam(s,5);
pushteam(s,6);
printf("此時(shí)隊(duì)列為:");
printteam(s);
teamlength(s);
int T=gettop(s);
printf("\n隊(duì)頭元素為:%d",T);
}實(shí)現(xiàn)結(jié)果:

總結(jié)
到此這篇關(guān)于C語(yǔ)言實(shí)現(xiàn)順序循環(huán)隊(duì)列實(shí)例的文章就介紹到這了,更多相關(guān)C語(yǔ)言順序循環(huán)隊(duì)列內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C/C++字符串函數(shù)之復(fù)制函數(shù)詳解
下面小編就為大家?guī)?lái)一篇C/C++字符串函數(shù)之復(fù)制函數(shù)詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09
關(guān)于C語(yǔ)言中數(shù)據(jù)在內(nèi)存中的存儲(chǔ)詳解
這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中數(shù)據(jù)在內(nèi)存中的存儲(chǔ)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之單向鏈表詳解
單向鏈表(單鏈表)是鏈表的一種,其特點(diǎn)是鏈表的鏈接方向是單向的,對(duì)鏈表的訪問(wèn)要通過(guò)順序讀取從頭部開(kāi)始。本文將為大家詳細(xì)講講單向鏈表的實(shí)現(xiàn)與使用,需要的可以參考一下2022-08-08
如何通過(guò)UltraEdit解析BMP文件內(nèi)部結(jié)構(gòu)(BMP位圖基礎(chǔ))
我們先打開(kāi)畫(huà)圖隨便畫(huà)一幅圖并采用24位bmp圖像格式保存,就得到了一張24位真彩色的位圖,下面我們來(lái)詳細(xì)分析bmp位圖的各個(gè)組成部分,感興趣的朋友跟隨小編一起看看吧2021-08-08
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單猜拳小游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單猜拳小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03
嵌入式C語(yǔ)言二級(jí)指針在鏈表中的應(yīng)用
這篇文章主要為大家介紹了嵌入式C語(yǔ)言二級(jí)指針在鏈表中的應(yīng)用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04
C語(yǔ)言實(shí)現(xiàn)常見(jiàn)進(jìn)制轉(zhuǎn)換的示例代碼
生活中最常見(jiàn)的進(jìn)制是十進(jìn)制,而有一類編程題會(huì)要求將十進(jìn)制轉(zhuǎn)換為其他進(jìn)制,本文將主要講述C語(yǔ)言中常見(jiàn)的幾類進(jìn)制轉(zhuǎn)換問(wèn)題,希望對(duì)大家有所幫助2023-04-04

