#include"stdio.h"
#include"stdlib.h"
#include"malloc.h"
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef struct node
{
ElemType data;
struct node *next;
}QueueNode;
typedef struct
{
QueueNode *front;
QueueNode *rear;
}LinkQueue;
/*链队列的初始化操作*/
int InitQueue(LinkQueue *Q)
{
Q->front=(QueueNode *)malloc(sizeof(QueueNode));
Q->front->next=NULL;
Q->rear=Q->front;
return OK;
}
/*链队列的初始化入队操作*/
int EnQueue(LinkQueue *Q,ElemType e)
{
QueueNode *p;
p=(QueueNode *)malloc(sizeof(QueueNode));
p->data=e;
p->next=NULL;
Q->rear->next=p;
Q->rear=p;
return OK;
}
/*链队列的出队操作*/
int DeQueue(LinkQueue *Q,ElemType *e)
{
QueueNode *p;
if(Q->front==Q->rear)
return ERROR;
p=Q->front->next;
*e=p->data;
Q->front->next=p->next;
if(Q->rear==p)
Q->rear=Q->front;
free(p);
return OK;
}
/*取链队列的队头元素*/
int GetHead(LinkQueue *Q,ElemType *e)
{
QueueNode *p;
if(Q->front==Q->rear)
return ERROR;
p=Q->front->next;
*e=p->data;
return OK;
}
/*判断链队列是否为空*/
int QueueEmpty(LinkQueue *Q)
{
if(Q->front==Q->rear)
return OK;
else
return ERROR;
}
/*求链队列的长度*/
int QueueLength(LinkQueue *Q)
{
int cnt=1;
QueueNode *p;
if(Q->front==Q->rear)
return ERROR;
p=Q->front->next;
while(p!=Q->rear)
{
cnt++;
p=p->next;
}
return cnt;
}
/*清空队列操作*/
int ClearQueue(LinkQueue *Q)
{
Q->rear=Q->front;
return OK;
}
void showmenu()
{
printf("\n\n");
printf("||------------------------------------------------||\n");
printf("|| 【0】判空 ||\n");
printf("||------------------------------------------------||\n");
printf("|| 【1】入队 ||\n");
printf("||------------------------------------------------||\n");
printf("|| 【2】出队 ||\n");
printf("||------------------------------------------------||\n");
printf("|| 【3】清空 ||\n");
printf("||------------------------------------------------||\n");
printf("|| 【4】取对头元素 ||\n");
printf("||------------------------------------------------||\n");
printf("|| 【5】队的长度 ||\n");
printf("||------------------------------------------------||\n");
printf("|| 【9】退出程序 ||\n");
printf("||------------------------------------------------||\n");
}
void main()
{
printf("欢迎进入!");
system("pause");
system("CLS");
LinkQueue myqueue;
int f,s;
ElemType e;
InitQueue(&myqueue);
while(1)
{
showmenu();
scanf("%d",&s);
system("CLS");
switch(s)
{
case 9:exit(0);
case 0:
f=QueueEmpty(&myqueue);
if(f=OK)
printf("此队为空!\n");
else
printf("此队不空!\n");
system("pause");
break;
case 1:
printf("请输入要入队的数:\n");
scanf("%d",&e);
f=EnQueue(&myqueue,e);
if(f==OK)
printf("入队成功\n");
else
printf("操作失败\n");
system("pause");
break;
case 2:
f=DeQueue(&myqueue,&e);
if(f==OK)
printf("出队成功,出队元素为:%d\n",e);
else
printf("出队失败\n");
system("pause");
break;
case 3:
f=ClearQueue(&myqueue);
if(f==OK)
printf("该队已清空\n");
else
printf("操作失败\n");
system("pause");
break;
case 4:
f=GetHead(&myqueue,&e);
if(f==OK)
printf("此队头元素为:%d\n",e);
else
printf("取头元素失败\n");
system("pause");
break;
case 5:
printf("此队队长为:%d\n",QueueLength(&myqueue));
break;
system("pause");
default:
printf("请选择菜单中的操作,按9退出程序\n");
system("pause");
}
}
}
数据结构之链队列
最新推荐文章于 2024-09-15 11:10:00 发布