队列的创建,入队,出队,遍历,判断是否为空,是否已满
//顺序循环队列的代码演示 视频p47
#include<bits/stdc++.h>
typedef struct Queue{
int front;
int rear;
int *pBase;
int len;
}Queue;
void init(Queue *pQ){
int length;
printf("请输入队列的长度:");
scanf("%d",&length);
pQ->len=length;
pQ->pBase=(int *)malloc(sizeof(int)*length);
pQ->front=0;
pQ->rear=0;
}
bool full(Queue *pQ){
if((pQ->rear+1)%pQ->len==pQ->front)
return true;
else
return false;
}
//入队
bool Enqueue(Queue *pQ,int val){
if(full(pQ))
return false;
pQ->pBase[pQ->rear]=val;
pQ->rear=(pQ->rear+1)%pQ->len;
return true;
}
bool empty(Queue *pQ){
if(pQ->front==pQ->rear)
return true;
else
return false;
}
//出队
bool Dequeue(Queue *pQ,int *pVal){
if(empty(pQ))
return false;
*pVal=pQ->pBase[pQ->front];
pQ->front=(pQ->front+1)%pQ->len;
return true;
}
void traverse(Queue *pQ){
int i=pQ->front;
while(i!=pQ->rear){
printf("%d ",pQ->pBase[i]);
i=(i+1)%pQ->len;
}
printf("\n");
return;
}
int main()
{
Queue Q;
init(&Q);
Enqueue(&Q,1);
Enqueue(&Q,2);
Enqueue(&Q,3);
int val;
if(Dequeue(&Q,&val))
printf("出队成功,出队的元素是%d\n",val);
else
printf("出队失败\n");
traverse(&Q);
}