程序运行出错,请斧正一下!
//(三)链式队列基本操作//1、队列结点定义
//根据实际处理数据的类型定义链队中结点的值域类型ElemType
#include<stdlib.h>
#include<stdio.h>
#include<malloc.h>
typedef int ElemType;
typedef struct node //队列结点类型定义
{ ElemType data; //队列的数据元素类型
struct node *link; //指向后继结点的指针
}NODE;
struct QueueLk{ //定义链队
NODE *front,*rear; //定义链队队头和队尾指针
};
//2、入队
NODE *ldcr(struct QueueLk *QL,ElemType x) //将元素x插入到链队列rear中,作为rear的新队尾
{
NODE *p;
p=(NODE *)malloc(sizeof(NODE));
p->data=x;
p->link=NULL; //置新结点的指针为空
if(QL->front==NULL) //队列为空
QL->front=QL->rear=p;
else
QL->rear->link=p; //将链队列中最后一个结点的指针指向新结点
QL->rear=p; //将队尾指向新结点
return QL->rear;
}
//3、出队
ElemType ldsc(struct QueueLk *QL) //若链队列不为空,则删除队头元素,返回其元素值
{
NODE *s;
ElemType x;
if(QL->rear==QL->front) //队空,退出程序
exit(1);
s=QL->front; //取队头保存在s中
QL->front=QL->front->link; //删除队头结点
if(QL->front->link==NULL) //如果删除后队列为空,则处理队尾指针
QL->rear=QL->front;
x=s->data; //将刚才出队的结点值给x
free(s) ; //释放出对结点的空间
return x;
}
main()
{
int n,choice;
ElemType e;
struct QueueLk *s;
while(choice)
{
printf(" *-----------------菜单如下-----------------*\n");
printf(" * *\n");
printf(" * 1.......入队列 *\n");
printf(" * *\n");
printf(" * 2.......出队列 *\n");
printf(" * *\n");
printf(" * 0........退出 *\n");
printf(" * *\n");
printf(" *------------------------------------------*\n\n");
printf("请输入选择的操作:");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("请输入要入队的元素:");
scanf("%d",&e);
ldcr(&s,e);
printf("入队成功!\n");
break;
case 2:
printf("请输入要出队的元素:");
scanf("%d",&n);
printf("出队的元素为:\n",n);
printf("%d ",ldsc(s));
printf("\n");
printf("出队成功!\n");
break;
case 0:
printf("退出运行!");
break;
}
}
return 0;
}