#include<stdio.h>
#include<stdlib.h>
// 定义链队数据节点
typedef struct qnode
{
int data;
struct qnode *next;
}DataNode;
// 定义链队头结点
typedef struct
{
DataNode *front;
DataNode *rear;
}LinkQuNode;
// 初始化队列
void InitQueue(LinkQuNode *q)
{
q = (LinkQuNode *)malloc(sizeof(LinkQuNode));
q -> front = q -> rear = NULL;
}
// 销毁队列
void DestroyQueue(LinkQuNode *q)
{
DataNode *pre = q -> front, *p; // pre指向队首节点(除了队头节点的第一个节点)
if(pre != NULL)
{
p = pre -> next;
while(p != NULL)
{
free(p);
pre = p; p = p -> next;
}
free(p);
}
free(q);
printf("队列已销毁");
return;
}
// 队列判空
void QueueEmpty(LinkQuNode *q)
{
if(q -> front == NULL)
printf("队列为空\n");
else
printf("队列不为空\n");
}
// 进队列
void enQueue(LinkQuNode *q, int e)
{
DataNode *p;
p = (DataNode *)malloc(sizeof(DataNode));
p -> data = e;
p -> next = NULL;
if(q -> rear == NULL) // 当结点是队列中的第一个结点时
q -> front = q -> rear = p; // 队头结点和队尾结点同时指向p
else
{
q -> rear -> next = p;
q -> rear = p;
}
}
// 出队列, 返回出队列的值e
int deQueue(LinkQuNode *q)
{
DataNode *t;
if(q -> rear == NULL) // 队列为空
{
printf("队列空\n");
return 1;
}
t = q -> front;
if(q -> front == q -> rear) // 队列中只有一个数据结点
q -> front = q -> rear = NULL;
else
{
q -> front = q -> front -> next;
}
printf("被删除的元素是:%d\n", t -> data);
free(t);
return 0;
}
// 入队功能函数
void pushQueue(LinkQuNode *q)
{
int i;
printf("输入要入队的数据:");
scanf("%d", &i);
enQueue(q, i);
printf("入队成功");
}
int main()
{
int menu;
LinkQuNode *q;
InitQueue(q);
printf("1 入队列 2 出队列\n");
printf("3 队列判空 4 销毁队列\n");
printf("5 退出\n");
while(1)
{
printf("请输入菜单号:");
scanf("%d", &menu);
if(menu == 5)
break;
switch(menu)
{
case 1: pushQueue(q); break;
case 2: deQueue(q); break;
case 3: QueueEmpty(q); break;
case 4: DestroyQueue(q); break;
default: printf("1\n");
}
}
return 0;
}
这是代码和调试的结果,实在找不出错误的原因,请求大佬告知。