链队列源代码(C语言版)
/*********实现了初始化,插入,删除,销毁,退出等功能*********/
#include<stdio.h>
#include<stdlib.h>
//定义节点
typedef struct QNode{
int data;
struct QNode * next;
}QNode,*QueuePtr;
//定义队头和队尾
typedef struct {
QueuePtr front;
QueuePtr rear;
}LinkQueue;
//初始化队列
void InitQueue(LinkQueue *Q){
if(Q->front=Q->rear=malloc(sizeof(QNode)))
Q->front->next=NULL;
else
exit(0);
}
//销毁队列
void DestroyQueue(LinkQueue * Q){
while(Q->front){
Q->rear=Q->front->next;
free(Q->front);
Q->front=Q->rear;
}
printf("销毁完成!\n");
}
//插入节点
void InsertQueue(LinkQueue * Q,int e){
QueuePtr q;
q=malloc(sizeof(QNode));
if(!q)
exit(0);
q->data=e; q->next=NULL;
Q->rear->next=q;
Q->rear=q;
}
//删除节点
void DeleteQueue(LinkQueue * Q){
QueuePtr p;
p=Q->front->next;
Q->front->next=p->next;
if(Q->rear==p)
Q->rear=Q->front;
free(p);
}
//打印队列
void PrintQueue(LinkQueue Q){
QueuePtr p;
if(Q.front==Q.rear){
printf("队列空\n");
}
printf("_____________________________________________________________________________\n");
p=Q.front->next;
while(p->next!=NULL){
printf("%d ",p->data);
p=p->next;
}
printf("%d\n",p->data);
printf("———————————————————————————————————————\n");
}
//主函数
int main(){
int i,x,v;
LinkQueue Q;
InitQueue(&Q);
for(i=1;i<=12;i++){
InsertQueue(&Q,i);
}
printf("十二个节点的链队列已初始化完成!\n");
PrintQueue(Q);
printf("请输入操作序号1.插入 2.删除 3.销毁 4.退出\n");
scanf("%d",&x);
while(x!=0){
switch(x){
case 1:printf("请输入要插入的数值:");
scanf("%d",&v);
InsertQueue(&Q,v);
PrintQueue(Q);
break;
case 2:printf("正在删除:\n");
DeleteQueue(&Q);
PrintQueue(Q);
break;
case 3:printf("正在销毁...\n");
DestroyQueue(&Q);
case 4:exit(0);
default:printf("输入参数有误,请重新输入!\n");
}
printf("请输入操作序号1.插入 2.删除 3.销毁 4.退出\n");
scanf("%d",&x);
}
return 0;
}
程序截图:
2016_12_27