数据结构——链队列——2016_12_27
链队列源代码(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