#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define TRUE 1
#define FALSE 0
#define OVERFLOW 0
typedef int Status;
typedef struct Node{
int data;
struct Node *next;
}Node,*QNode;
typedef struct{
QNode front;//队头指针
QNode rear;//队尾指针
}LinkQueue;
//初始化队列
Status InitQueue(LinkQueue *Q)
{
Q->front=Q->rear=(QNode)malloc(sizeof(QNode));
if(Q->front==NULL)exit(OVERFLOW);
Q->front->next=NULL;
return OK;
}
//进队
int EnQueue(LinkQueue *Q,int e)
{
QNode s;
s=(QNode)malloc(sizeof(Node));
if(s==NULL)return FALSE;
s->data=e;
s->next=NULL;
Q->rear->next=s;
Q->rear=s;
return TRUE;
}
//出队
int OutQueue(LinkQueue *Q,int *e)
{
QNode p;
if(Q->front==Q->rear)
return FALSE;
p=Q->front->next;
*e=p->data;
Q->front->next=p->next;
if(Q->rear==p)
Q->rear=Q->front;
free(p);
return TRUE;
}
//销毁队列
Status DestroyQueue(LinkQueue *Q)
{
while(Q->front!=NULL)
{
Q->rear=Q->front->next;
free(Q->front);
Q->front=Q->rear;
}
return OK;
}
//判空
Status QueueEmpty(LinkQueue Q)
{
return Q.front==Q.rear?TRUE:FALSE;
}
void main()
{
int ch=1;
LinkQueue Q;
while(ch!=0)
{
system("cls");
printf("1.初始化\t2.销毁队列\t3.判空\n4.进队\t\t5.出队\n");
printf("请选择:\n");
scanf("%d",&ch);
switch(ch)
{
case 0:printf("byebye!\n");
break;
case 1:
{
if(InitQueue(&Q)==OK)
printf("初始化成功\n");
else
printf("初始化失败\n");
break;
}
case 2:
{
if(DestroyQueue(&Q)==OK)
printf("队列已摧毁\n");
else
printf("摧毁失败\n");
break;
}
case 3:
{
if(QueueEmpty(Q)==OK)
printf("队列为空\n");
else
printf("队列不为空\n");
break;
}
case 4:
{
int e;
printf("请输入你要入队的数值:\n");
scanf("%d",&e);
if(EnQueue(&Q,e)==OK)
printf("入队成功\n");
else
printf("入队失败\n");
break;
}
case 5:
{
int e;
OutQueue(&Q,&e);
printf("%d\n",e);
break;
}
default:
printf("输入错误,请重新输入\n");
break;
}
system("pause");
}
}
数据结构-C语言实现队列
最新推荐文章于 2024-05-13 19:09:22 发布