队列是一种先进先出的数据结构,在写队列的代码时,建议先对链表的操作有所掌握。在这里实现一种链表式的队列。
// queue2.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "stdlib.h" #include "stdio.h" typedef struct QNode { int data; QNode *next; }QNode; typedef struct Liqueue { QNode *front; QNode *rear; }Liqueue; void initQueue(Liqueue *queue) { queue->front = queue->rear = (QNode *)malloc(sizeof(QNode)); queue->front = queue->rear = NULL; } bool idEmpty(Liqueue *queue) { if(queue->front == NULL || queue->rear == NULL) { return 1; } else return 0; } //进队列 void insertQueue(Liqueue *queue, int data) { QNode *node = (QNode *)malloc(sizeof(QNode)); node->data = data; node->next = NULL; if(queue->rear == NULL) { queue->rear = queue->front = node; //如果是第一个节点 } else { queue->rear->next = node; queue->rear = node; } } int popQueue(Liqueue *queue, int *data) { QNode *node = queue->front; if(queue->front == NULL || queue->rear ==NULL) //控队列 return 0; if(queue->front == queue->rear){ queue->front = queue->rear = NULL; }else{ queue->front = queue->front->next; } *data = node->data; free(node); return 1; } //遍历队列 void transQueue(Liqueue queue) { int i = 1; QNode *p = queue.front; while(p != NULL ){ printf("节点 : %d\n",p->data); i++; p = p->next; } } int _tmain(int argc, _TCHAR* argv[]) { Liqueue queue; initQueue(&queue); insertQueue(&queue, 0); insertQueue(&queue, 1); insertQueue(&queue,2); insertQueue(&queue, 3); transQueue(queue); int tt; popQueue(&queue,&tt); printf("队尾取出1条数据 %d\n",tt); transQueue(queue); system("pause"); return 0; }
执行结果: