#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(SqQueue)
#define MAXSIZE 10
typedef struct
{
int data[MAXSIZE];
int front;
int rear;
}SqQueue;
SqQueue *Q;
void InitQueue()
{
Q = (SqQueue*)malloc(LEN);
Q -> front = 0;
Q -> rear = 0;
}
void QueueLength()
{
printf("length = %d\n", (Q -> rear - Q -> front + MAXSIZE) % MAXSIZE);
}
int EnQueue()
{
int e;
if((Q -> rear + 1) % MAXSIZE == Q -> front)
{
printf("queue full!\n");
return 0;
}
printf("Please input value:");
scanf("%d",&e);
Q -> data[Q -> rear] = e;
Q -> rear = (Q -> rear + 1) % MAXSIZE;
return 1;
}
int DeQueue()
{
if(Q -> rear == Q -> front)
{
printf("queue null!\n");
return 0;
}
Q -> front = (Q -> front + 1) % MAXSIZE;
}
void EmptyQueue()
{
if(Q -> rear == Q -> front)
{
printf("queue empty!\n");
}
else
{
printf("queue not empty!\n");
}
}
void ClearQueue()
{
Q -> rear = 0;
Q -> front = 0;
}
void DestroyQueue()
{
Q -> rear = 0;
Q -> front = 0;
free(Q);
Q = NULL;
}
void GetHead()
{
printf("data = %d\n",Q -> data[Q -> front]);
}
void TraverseQueue()
{
int i = Q -> front;
while(i != Q -> rear)
{
printf("data = %d\n",Q -> data[i]);
i = (i + 1) % MAXSIZE;
}
}
int main()
{
int n;
while(1)
{
printf("1.Init 2.EnQueue 3.DeQueue 4.Empty 5.Length 6.Clear\n 7.Destroy 8.GetTop 9.Print 10.Exit\n");
printf("Please input num:");
scanf("%d",&n);
switch(n)
{
case 1:InitQueue();break;
case 2:EnQueue();break;
case 3:DeQueue();break;
case 4:EmptyQueue();break;
case 5:QueueLength();break;
case 6:ClearQueue();break;
case 7:DestroyQueue();break;
case 8:GetHead();break;
case 9:TraverseQueue();break;
}
if(n == 10)
break;
}
}
循环队列的各种操作
最新推荐文章于 2023-12-18 14:23:15 发布