#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
//循环队列的顺序储存结构
typedef struct
{
int date[MAXSIZE];
int front;
int rear;
}SqQueue;
//初始化一个空队列
int InitQueue(SqQueue *Q)
{
Q->front=0;
Q->rear=0;
return 1;
}
//返回Q元素个数,也就是队列长度
int QueueLength(SqQueue Q)
{
return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
}
//若队列未满,则插入e为新的队尾元素
int EnQueue(SqQueue *Q,int e)
{
if((Q->rear+1)%MAXSIZE==Q->front) //队列已满的判断
return 0; //当队列front与rear相差一个位置时记队列为满
Q->date[Q->rear]=e;
Q->rear=(Q->rear+1)%MAXSIZE;
return 1; //rear指针后移一位,若到队尾则移到队列头部
}
//若队列不空,则删除Q中队头元素,并用E返回他的值
int DeQueue(SqQueue *Q,int *e)
{
if(Q->front==Q->rear) //队列为空的判断
return 0;
*e = Q->date[Q->front];
Q->front=(Q->front+1)%MAXSIZE; //front 指针后移如果是在队尾则转到数组头部
return 1;
}
//将队列清空
void ClearQueue(SqQueue *Q)
{
Q->front=0;
Q->rear=0;
}
//队列存在则将他销毁
int DestoryQueue(SqQueue *Q)
{
free(Q);
return 1;
}
//若队列为空返回1否则返回0
int QueueEmpty(SqQueue Q)
{
if(Q.rear==Q.front)
return 1;
return 0;
}
int GetHead(SqQueue Q,int *e)
{
if(QueueEmpty(Q))
return 0;
*e=Q.date[Q.front];
return 1;
}
void PRINTF(SqQueue Q)
{
int i;
for(i=Q.front;i<Q.rear;i++)
{
printf("%d ",Q.date[i]);
}
}
int main()
{
SqQueue *Q;
Q = (SqQueue*)malloc(sizeof(SqQueue));
InitQueue(Q);
int i,n,temp;
printf("请输入队列元素个数");
scanf("%d",&n);
printf("请依次输入队列元素:");
for(i=0;i<n;i++)
{
scanf("%d",&temp);
EnQueue(Q,temp);
}
printf("队列元素如下:");
PRINTF(*Q);
printf("\n当前队列长度为%d",QueueLength(*Q));
if( GetHead(*Q,&temp))
printf("\n队头元素为%d",temp);
DeQueue(Q,&temp);
printf("\n删除队头元素%d后队列元素如下:",temp);
PRINTF(*Q);
if(QueueEmpty(*Q))
printf("\n经判断队列已经为空");
else
printf("\n经判断队列不为空");
ClearQueue(Q);
printf("\n队列已经清空");
DestoryQueue(Q);
printf("\n队列已经销毁");
return 0;
}
线性队列
最新推荐文章于 2022-10-16 13:19:04 发布