=#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 5
typedef int DataType;
typedef struct queue{
DataType Data[MAXSIZE];
int front;//队头位置
int rear;//队尾位置
}SeqQueue;
void InitQueue(SeqQueue *queue);//队列的初始化
int EmptyQueue(SeqQueue *queue);//队列是否为空
int FullQueue(SeqQueue *queue);//队列是否为满
int getLength(SeqQueue *queue);//获取队列长度
int EnQueue(SeqQueue *queue,DataType Elem);//入队
int DeQueue(SeqQueue *queue);//出队
void TraveQueue(SeqQueue *queue);//队列输出
void InitQueue(SeqQueue *queue){
queue->front=0;
queue->rear=0;
}
int EmptyQueue(SeqQueue *queue){
return queue->front==queue->rear;//队头和队尾指向同一个位置,即队列为空,不一定都指向0位置
}
int FullQueue(SeqQueue *queue){
return queue->front==(queue->rear+1)%MAXSIZE;
}
int getLength(SeqQueue *queue){
return (queue->rear-queue->front+MAXSIZE)%MAXSIZE;
}
//入队(在队尾queue->rear入队)
int EnQueue(SeqQueue *queue,DataType Elem){
if(FullQueue(queue))
return 0;
queue->Data[queue->rear]=Elem;
queue->rear=(queue->rear+1)%MAXSIZE;//循环队列关键
return 1;
}
//出队(在队头出队queue->front)
int DeQueue(SeqQueue *queue){
if(EmptyQueue(queue))
return 0;
queue->front=(queue->front+1)%MAXSIZE;
return 1;
}
void TraveQueue(SeqQueue *queue){
int i,j;
for(i=queue->front;i<getLength(queue)+queue->front;i++)
printf("%d\t",queue->Data[i%MAXSIZE]);
printf("\n");
}
int main(){
SeqQueue pQueue;
InitQueue(&pQueue);
EnQueue(&pQueue,9);
EnQueue(&pQueue,8);
EnQueue(&pQueue,8);
EnQueue(&pQueue,2);
EnQueue(&pQueue,4);//满了不能插入
DeQueue(&pQueue);
EnQueue(&pQueue,5);
DeQueue(&pQueue);
EnQueue(&pQueue,0);
TraveQueue(&pQueue);
printf("元素个数%d\n",getLength(&pQueue));
if(EmptyQueue(&pQueue))
printf("队列为空\n");
else
printf("队列不为空\n");
if(FullQueue(&pQueue))
printf("队列为满\n");
else
printf("队列不为满\n");
system("pause");
return 0;
}
数据结构C语言(环形队列)
最新推荐文章于 2024-10-24 22:11:48 发布