数据结构算法:带头结点的循环链表表示队列

本文介绍了如何使用循环链表来表示队列,通过让尾部指针指向头节点,解决了单指针无法出队的问题。初始化时返回头指针,方便后续判空和操作。代码实现简洁,适合快速理解和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路

普通的队列一般设有同时指向尾部和头部的指针,因为使用了循环链表的思想,就可以省去头节点的设置,让尾部指向头节点,这样就解决了单指针无法出队的问题,只要循环到出队元素的前一个元素即可。需要注意的是,因为需要多次使用到头指针,这里在初始化队列的时候将头指针直接返回,便于后面的判空插入等一系列操作,具体代码实现如下;

// 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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值