链式队列
Posted yolo-in-the-sun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链式队列相关的知识,希望对你有一定的参考价值。
队列结构
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #define OK 1; 5 #define False -1; 6 //结点结构 7 typedef struct QNode 8 { 9 char date; 10 struct QNode *next; 11 }QNode; 12 //链式队列结构 13 typedef struct Flag 14 { 15 QNode *front; 16 QNode *rear; 17 }Flag;
队列初始化
1 //初始化 2 int InitQueue (Flag *q) 3 { 4 q->front=q->rear=(QNode *)malloc(1*sizeof(QNode)); 5 if(!q->front) 6 { 7 exit(0); 8 } 9 q->front->next=NULL; 10 return OK; 11 }
入队
1 //入队 2 int CreateQueue(Flag *q,char e) 3 { 4 QNode *p; 5 p=(QNode *)malloc(1*sizeof(QNode)); 6 if(!p) 7 { 8 exit(0); 9 } 10 p->date=e; 11 p->next=NULL; 12 13 q->rear->next=p;//尾插法,第一个元素位于首元节点位置,front相当于头节点,不存数 14 q->rear=p;//队尾变更 15 return OK; 16 }
打印
1 //打印 2 int PrintQueue(Flag *q) 3 { 4 QNode *pMove; 5 pMove=q->front->next;//易错,注意刚开始遍历的地方类似于链表中的首元结点,此处的定位有一层嵌套 6 while(pMove!=NULL) 7 { 8 printf("%c",pMove->date); 9 pMove=pMove->next; 10 } 11 return OK; 12 }
判空
1 //判空 2 int Empty(Flag *q) 3 { 4 if(q->front==q->rear) 5 return OK; 6}
出栈并销毁
1 //出栈+销毁 2 int DeleteQueue(Flag *q,int a)//出栈 3 { 4 5 QNode *w; 6 w=q->front->next;//相当于将首元的地址和数值(间接)一起传给w 7 8 q->front->next=w->next; 9 if(a==1) 10 printf(" 出队一个元素:%c",w->date); 11 if( q->rear == w)//当只剩一个元素的处理 12 q->rear = q->front; 13 free(w); 14 return OK; 15 }
主函数测试
1 //出栈+销毁 2 int DeleteQueue(Flag *q,int a)//出栈 3 { 4 5 QNode *w; 6 w=q->front->next;//相当于将首元的地址和数值(间接)一起传给w 7 8 q->front->next=w->next; 9 if(a==1) 10 printf(" 出队一个元素:%c",w->date); 11 if( q->rear == w) 12 q->rear = q->front; 13 free(w); 14 return OK; 15 }
以上是关于链式队列的主要内容,如果未能解决你的问题,请参考以下文章