#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<malloc.h>
//定义一个节点
typedef struct{
int data;
struct *next;
}QNode;
//定义一个链,其中front表示链头,rear表示链尾
typedef struct{
QNode *front,*rear;
}LQ;
LQ q;
//初始化
int Init(LQ q){
QNode *hnode = NULL;
hnode = (QNode *)malloc(sizeof(QNode));
if (NULL == hnode)
return -1;//内存分配失败
hnode->next=NULL;
return 0;
}
//判空
int Empty(LQ q){
if(q.front == q.rear)
return 1;
return 0;
}
//求长度
int Length(LQ q){
int count = 0;
QNode *p=q.front;
while(p!=q.rear){
p=p->next;
count++;
}
return count;
}
//入队
int In(LQ q,int e){
QNode *p;
p =(QNode *)malloc(sizeof(QNode));
if(NULL==p)
return -1;
p->data=e;
p->next=NULL;
q.rear->next=p;
q.rear=p;
return 0;
}
//出队
int Out(LQ q){
QNode *p;
if(Empty(q))
return -1;
p = (q.front)->next;
q.front->next=p->next;
free(p);
return 0;
}
//显示
int Show(LQ q){
for(;q.front!=q.rear;q.front=q.front->next)
printf("%d",q.front->data);
return 0;
}
int main(){
LQ q;
int i,e,j=0;
if(!Init(q)){
printf("创建失败!按任意键结束:");
getch();
exit(0);
}
printf("\t\t 1-入队并且显示 \n");
printf("\t\t 2-出队并且显示 \n");
printf("\t\t 3-显示 \n");
printf("\t\t 4-退出 \n");
loop:
printf("请输入你要进行的操作:");
scanf("%d",&i);
switch(i){
case 1:
printf("请输入你要入队的数目:");
scanf("%d",&i);
if(Empty(q)){
printf("队列为空!");
return 0;
}
else{
printf("请输入你的数字:");
for(j=0;j<i;j++){
scanf("%d",&e);
In(q,e);
}
Show(q);
}
break;
case 2:
if(Empty(q)){
printf("队列为空!");
return 0;
}
else{
printf("请输入你要出队的次数:");
scanf("%d",&i);
for(j=0;j<i;j++)
Out(q);
Show(q);
}
break;
case 3:
if(Empty(q)){
printf("队列为空!");
return 0;
}
else
Show(q);
break;
case 4:
exit(0);
break;
case 5:
if(Empty(q)){
printf("队列为空!");
return 0;
}
else
Length(q);
break;
default:
printf("你的输入有误请再次输入在1-4之间选择:");
goto loop;
}
printf("是否继续进行链队列操作?1-yes");
scanf("%d",&i);
if(i==1)
goto loop;
else{
printf("按任意键退出!");
getch();
exit(0);
}
return 0;
}