牛骨文教育服务平台(让学习变的简单)
#include<stdio.h>  
#include<malloc.h>  
#include<windows.h>  
typedef int elemtype;  
typedef struct qnode //数据节点的定义  
{  
elemtype data;  
struct qnode *next;  
}qnode;  
typedef struct //链队的定义  
{  
qnode *front;  
qnode *rear;  
}liqueue;  
void initqueue(liqueue *&q) //初始化  
{  
q=(liqueue *)malloc(sizeof(liqueue));  
q->front=q->rear=NULL;  
}  
void enqueue(liqueue *q) //进队  
{  
int e;  
qnode *p;  
p=(qnode *)malloc(sizeof(qnode));  
printf("请输入需进队元素:");  
scanf("%d",&e);  
p->data=e;  
p->next=NULL;  
if(q->rear==NULL)  
{  
q->front=q->rear=p;  
printf("进队成功!
");  
}  
else  
{  
q->rear->next=p;  
q->rear=p;  
printf("进队成功!
");  
}  
}  
void queueempty(liqueue *q) //判断队列是否为空  
{  
if(q->rear==NULL)  
printf("队列为空!
");  
else  
printf("队列不为空!
");  
}  
void dequeue(liqueue *&q) //出队列  
{  
int e;  
qnode *t;  
if(q->rear==NULL)  
printf("队列为空,出队失败!
");  
else  
{  
t=q->front;  
e=t->data;  
if(q->front==q->rear)  
q->front=q->rear=NULL;  
else  
q->front=q->front->next;  
free(t);  
printf("元素%d出队列成功!
",e);   
}  
}  
void destroyqueue(liqueue *q) //销毁链队  
{  
qnode *p=q->front,*r;  
char t;  
getchar();  
printf("确定要销毁链队请输入y,否则不销毁!
");  
scanf("%c",&t);  
if(t=="y")  
{  
if(p!=NULL)  
{  
r=p->next;  
while(r!=NULL)  
{  
free(p);  
p=r;  
r=p->next;  
}  
}  
free(p);  
free(q);  
printf("销毁成功
");  
exit(0);  
}  
else  
printf("链队未销毁!
");  
}  
void main()  
{  
liqueue *q;  
printf(" ***************欢迎使用链队的运算系统******************
");  
int m;  
initqueue(q);  
while(1)  
{  
printf("请选择:");  
printf("1 进队列
");  
printf(" 2 出队列
");  
printf(" 3 判断队列是否为空
");  
printf(" 4 销毁链队
");  
printf(" 5 退出
");  
scanf("%d",&m);  
switch(m)  
{  
case 1:enqueue(q);break;  
case 2:dequeue(q);break;  
case 3:queueempty(q);break;  
case 4:destroyqueue(q);break;  
case 5:exit(0);  
default:printf("输入错误请重新输入!
");  
}  
}  
}