自己复习了一下简单队列的基本操作,其中要注意的是队头和队尾要始终保持位置正确~还是老习惯,上代码+注释啦~
Code:
#include<iostream> using namespace std; typedef struct node { int data; struct node *next; }node;//定义指针结构 typedef struct queue { node *first, *rear;//定义队头、队尾指针。 }queue; //入队 queue *insert(queue *Q, int x) { node *i; //先创建要入队的节点。 i = (node *)malloc(sizeof(node)); i->data = x; if(Q == NULL) {//如果队列结构体为空(还未插入值),则创建队列结构体。 Q = (queue *)malloc(sizeof(queue)); Q->first = Q->rear = i; Q->rear->next = NULL; } else {//按顺序将节点入队。 Q->rear->next = i; Q->rear = i; i->next = NULL; } return Q; } //出队 queue *del(queue *Q) { node *temp; //先定义一个中间节点,以便将队头处理完后将原队头空间释放。 if(Q->first == NULL) {//如果队列唯空,则报错退出。 printf("Queue is null !"); return NULL; } else {//和单链表删除头节点的处理一样 temp = Q->first; Q->first = Q->first->next; free(temp);//别忘了释放哦~ } return Q; } //打印队列 void print(queue *Q) {//与单链表的处理一样 node *temp; temp = Q->first; printf("Output the Queue : "); while(1) { if(temp == NULL) break; if(temp != Q->rear) printf("%d<-", temp->data); else printf("%d\n", temp->data); temp = temp->next; } } int main() { queue *Q = NULL; int x; printf("Insert Queue (end with 0) : "); //插入队列 while(scanf("%d", &x) != EOF && x != 0) { Q = insert(Q, x); } print(Q); //出队 printf("\nAfter deleting~\n"); Q = del(Q); print(Q); printf("\n"); return 0; }
运行示例:
Ps:仅供参考哈~
链表初解(四)——队列的入队和出队,布布扣,bubuko.com
原文:http://blog.csdn.net/zenail501129/article/details/22478329