#include <stdio.h>
#include <stdlib.h>
typedef int elemType;
#define maxsize 100
struct Quenue {
elemType date;
struct Quenue *next;
};
struct QuenueLK {
struct Quenue *front;
struct Quenue *rear;
};
void InitQueue(struct QuenueLK *s)
{
s->front = s->rear = NULL;
return ;
}
void DestroyQueue(struct QuenueLK *s)
{
struct Quenue *p = s->front;
if(p!=NULL)
{
s->front = s->front->next;
free(p);
p = s->front ;
}
s->rear = NULL;
return ;
}
int QueueEmpty(struct QuenueLK *s)
{
if(s->front!=NULL)
{
return 1;
}
else
return 0;
}
int QueueLength(struct QuenueLK *s)
{
int sum = 0;
struct QuenueLK *p =s;
while(p->rear!=NULL)
{
p->rear = p->rear->next;
}
return sum;
}
elemType GetHead(struct QuenueLK *s)
{
if(s->rear!=NULL)
{
return s->front->date;
}
else
return 0;
}
void EnQueue(struct QuenueLK *s,elemType x)
{
struct Quenue *newp;
newp = malloc(sizeof(struct Quenue));
if(newp == NULL)
{
printf("内存分配失败!");
exit(1);
}
newp->date = x;
newp->next = NULL;
if(s->rear == NULL)
{
s->front = s->rear = newp;
}
else
s->rear = s->rear->next = newp;
return ;
}
elemType DeQueue(struct QuenueLK *s)
{
struct Quenue *p;
elemType x = 0;
if(s->front == NULL)
{
printf("队列为空,无法删除!");
exit(1);
}
x = s->front->date;
p = s->front;
s->front = p->next;
if(s->front == NULL)
{
s->rear = NULL;
}
free(p);
return x;
}
void traverse(struct QuenueLK s)
{
struct QuenueLK *p = &s;
printf("从队首到队尾依次输出:");
while(p->front!=NULL)
{
printf("%d ",p->front->date);
p->front = p->front->next;
}
return ;
}
void main()
{
elemType x = 0;
int i = 0;
struct QuenueLK s;
while(1)
{
printf("1->初始化链式队列\n");
printf("2->销毁队列\n");
printf("3->判空队列\n");
printf("4->队列长度\n");
printf("5->读取队首元素\n");
printf("6->入列\n");
printf("7->出列\n");
printf("8->遍历队列\n");
printf("清选择操作:");
scanf("%d",&i);
switch(i)
{
case 1:
printf("初始化链式队列");
InitQueue(&s);
break;
case 2:
printf("销毁队列:");
DestroyQueue(&s);
break;
case 3:
if(QueueEmpty(&s))
{
printf("队列非空!");
getchar();
getchar();
break;
}
else
printf("队列为空!");
getchar();
getchar();
break;
case 4:
printf("队列长度为%d:",QueueLength(&s));
getchar();
getchar();
break;
case 5:
printf("队首元素为%d:",GetHead(&s));
getchar();
getchar();
break;
case 6:
printf("请输入入列元素:");
scanf("%d",&x);
EnQueue(&s,x);
getchar();
getchar();
break;
case 7:
printf("出列元素为:%d",DeQueue(&s));
getchar();
getchar();
break;
case 8:
printf("遍历队列!\n");
traverse(s);
getchar();
getchar();
break;
}
system("cls");
}
}