思路
普通的队列一般设有同时指向尾部和头部的指针,因为使用了循环链表的思想,就可以省去头节点的设置,让尾部指向头节点,这样就解决了单指针无法出队的问题,只要循环到出队元素的前一个元素即可。需要注意的是,因为需要多次使用到头指针,这里在初始化队列的时候将头指针直接返回,便于后面的判空插入等一系列操作,具体代码实现如下;
// ConsoleApplication11.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "stdlib.h" typedef struct QueueNode { int data; QueueNode * next; }QNode,*PQNode; //建立队列节点 typedef struct Queue { PQNode rear; //创建指向队列尾部节点的指针 }Queue,*PQueue; void isEmpty(PQueue Q,PQNode head); PQNode Init_Queue(PQueue Q); //置空 void En_Queue(PQueue Q,int data,PQNode head); int OutQueue(PQueue Q); void traverse(PQueue Q,PQNode head); int _tmain(int argc, _TCHAR* argv[]) { Queue Q; PQNode head = Init_Queue(&Q); int nums; scanf_s("%d",&nums); char x = getchar(); while (nums != -1) //值不为-1 持续输出 { En_Queue(&Q,nums,head); scanf_s("%d",&nums); x = getchar(); } traverse(&Q,head); isEmpty(&Q,head); return 0; } void traverse(PQueue Q,PQNode he