隊列也是一種操作受限的線性表
一般的隊列的順序存儲結構有很大弊端:“假溢出”
利用取餘(模)運算將順序隊列臆造爲一個環狀的空間,
即把存儲隊列元素的表從邏輯上視爲一個環,成爲循環隊列
以下實現犧牲一個單元來區分隊空還是隊滿
//隊列是一種操作受限的線性表
//一般的隊列的順序存儲結構有很大弊端:“假溢出”
//利用取餘(模)運算將順序隊列臆造爲一個環狀的空間,
//即把存儲隊列元素的表從邏輯上視爲一個環,成爲循環隊列
//以下實現犧牲一個單元來區分隊空還是隊滿
//ElemType:int
#include<stdio.h>
#define MaxSize 10
typedef struct{
int data[MaxSize];//用靜態數組存放數據元素
int front,rear;//隊頭指針和隊尾指針,隊頭指針指向隊頭元素,隊尾指針指向隊尾元素後一位
}SqQueue;
void InitQueue(SqQueue &Q){//初始化隊列
Q.rear=Q.front=0;
}
//other functions
bool QueueEmpty(SqQueue Q){
if(Q.rear==Q.front)return true;
else return false;
}
//important functions
bool EnQueue(SqQueue &Q,int x){//入隊
if((Q.rear+1)%MaxSize==Q.front)return false;//判斷隊滿
Q.data[Q.rear]=x;
Q.rear=(Q.rear+1)%MaxSize;
return true;
}
bool DeQueue(SqQueue &Q,int &x){//出隊,用x返回
if(Q.rear==Q.front)return false;//判斷隊空
x=Q.data[Q.front];
Q.front=(Q.front+1)%MaxSize;
return true;
}
bool GetHead(SqQueue Q,int &x){//獲得隊頭元素,用x返回
if(Q.rear==Q.front)return false;//判空
x=Q.data[Q.front];
return true;
}
int main(){
SqQueue Q;
InitQueue(Q);
EnQueue(Q,1);
EnQueue(Q,2);
EnQueue(Q,3);
EnQueue(Q,4);
int x;
DeQueue(Q,x);
for(int i=Q.front;i<Q.rear;i++){
printf("%d ",Q.data[i]);
}
printf("\n%d",x);
return 0;
}