队列的链式存储

最后更新于:2022-04-01 09:42:59

~~~ #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("进队成功!\n"); } else { q->rear->next=p; q->rear=p; printf("进队成功!\n"); } } void queueempty(liqueue *q) //判断队列是否为空 { if(q->rear==NULL) printf("队列为空!\n"); else printf("队列不为空!\n"); } void dequeue(liqueue *&q) //出队列 { int e; qnode *t; if(q->rear==NULL) printf("队列为空,出队失败!\n"); 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出队列成功!\n",e);  } } void destroyqueue(liqueue *q) //销毁链队 { qnode *p=q->front,*r; char t; getchar(); printf("确定要销毁链队请输入y,否则不销毁!\n"); 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("销毁成功\n"); exit(0); } else printf("链队未销毁!\n"); } void main() { liqueue *q; printf(" ***************欢迎使用链队的运算系统******************\n"); int m; initqueue(q); while(1) { printf("请选择:"); printf("1 进队列\n"); printf(" 2 出队列\n"); printf(" 3 判断队列是否为空\n"); printf(" 4 销毁链队\n"); printf(" 5 退出\n"); 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("输入错误请重新输入!\n"); } } } ~~~
';