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

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

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

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

總結(jié)
到此這篇關(guān)于C語言實現(xiàn)順序循環(huán)隊列實例的文章就介紹到這了,更多相關(guān)C語言順序循環(huán)隊列內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
VS Code 中搭建 Qt 開發(fā)環(huán)境方案分享
這篇文章主要介紹了VS Code 中搭建 Qt 開發(fā)環(huán)境方案分享的相關(guān)資料,需要的朋友可以參考下2022-12-12
Cocos2d-x學(xué)習(xí)筆記之Hello World!
這篇文章主要介紹了Cocos2d-x學(xué)習(xí)筆記之Hello World!本文基于vs2010和C++語言開發(fā),需要的朋友可以參考下2014-09-09
C++詳解默認(rèn)參數(shù)的構(gòu)造函數(shù)及簡單實例代碼
這篇文章主要介紹了 C++詳解默認(rèn)參數(shù)的構(gòu)造函數(shù)及簡單實例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02
C/C++?Linux?Socket網(wǎng)絡(luò)編程流程分析
這篇文章主要介紹了C/C++?Linux?Socket網(wǎng)絡(luò)編程,Linux環(huán)境中的C/C++?socket?與Window環(huán)境中的C/C++?socket類似,本文所記錄的是TCP協(xié)議的socket編程,圖文實例相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02

