针对考研的C语言学习(循环队列-链表版本以及2019循环队列大题)

题目

【注】此版本严格按照数字版循环队列的写法,rear所代表的永远是空数据

图解

1.初始化部分和插入部分

2出队

3.分部代码解析

初始化

cpp 复制代码
void init_cir_link_que(CirLinkQue& q)
{
	q.rear = q.front = (LinkList)malloc(sizeof(LNode));
	q.front->next = NULL;
	q.rear->next = q.front;
}

入队

cpp 复制代码
bool insert_que(CirLinkQue& q, ElemType data)
{
	//此版本严格按照数组版本的结构,rear节点所代表数据永远为空
	if (q.rear->next == q.front)
	{
		//表示现有空间已满,需额外开辟空间
		LinkList pnew = (LinkList)malloc(sizeof(LNode));
		q.rear->data = data;
		q.rear->next = pnew;
		pnew->next = q.front;
		q.rear = pnew;
		return true;
	}
	//不需要额外开辟空间
	//意思就是已经有出去过的数据了,但没有断链,可重复使用
	q.rear->data = data;
	q.rear = q.rear->next;
	return true;
}

出队

cpp 复制代码
bool pop_que(CirLinkQue& q, ElemType& data)
{
	//出队
	//判空
	if (q.rear == q.front)
	{
		return false;
	}
	data = q.front->data;
	q.front->data = NULL;//可写可不写,后面新插入的数据会覆盖这些不要的数据
	q.front = q.front->next;
	return true;
}

全部可运行代码

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct node {
	ElemType data;
	struct node* next;
}LNode, * LinkList;

typedef struct {
	LinkList front;
	LinkList rear;
}CirLinkQue;

void init_cir_link_que(CirLinkQue& q)
{
	q.rear = q.front = (LinkList)malloc(sizeof(LNode));
	q.front->next = NULL;
	q.rear->next = q.front;
}

bool insert_que(CirLinkQue& q, ElemType data)
{
	//此版本严格按照数组版本的结构,rear节点所代表数据永远为空
	if (q.rear->next == q.front)
	{
		//表示现有空间已满,需额外开辟空间
		LinkList pnew = (LinkList)malloc(sizeof(LNode));
		q.rear->data = data;
		q.rear->next = pnew;
		pnew->next = q.front;
		q.rear = pnew;
		return true;
	}
	//不需要额外开辟空间
	//意思就是已经有出去过的数据了,但没有断链,可重复使用
	q.rear->data = data;
	q.rear = q.rear->next;
	return true;
}

bool pop_que(CirLinkQue& q, ElemType& data)
{
	//出队
	//判空
	if (q.rear == q.front)
	{
		return false;
	}
	data = q.front->data;
	q.front->data = NULL;//可写可不写,后面新插入的数据会覆盖这些不要的数据
	q.front = q.front->next;
	return true;
}
int main()
{
	CirLinkQue q;
	ElemType data;
	init_cir_link_que(q);
	insert_que(q, 1);
	insert_que(q, 2);
	insert_que(q, 3);
	pop_que(q, data);
	insert_que(q, 4);
	/*pop_que(q, data);
	insert_que(q, 5);
	pop_que(q, data);
	pop_que(q, data) ? puts("true") : puts("false");*/
	return 0;
}

4.运行结果图

动图展示也不太清晰,若不懂的可以手动操作一下感受一下

相关推荐
小龙报4 分钟前
VS2022调试技巧 + 实战案例
android·服务器·c语言·数据库·c++·windows·visual studio
h***04775 分钟前
爬虫学习案例3
爬虫·python·学习
枫叶丹47 分钟前
【Qt开发】Qt窗口(四) -> QDockWidget浮动窗口
c语言·开发语言·c++·qt·开源
kkkkkkkkk_120111 分钟前
【强化学习】周博磊强化学习纲要学习笔记——第二课上
笔记·学习
秋深枫叶红13 分钟前
嵌入式第二十五篇——数据结构单向链表
c语言·数据结构·学习·算法
BlackWolfSky19 分钟前
React Native学习路径与资源推荐
javascript·学习·react native
z樾21 分钟前
PettingZoo 学习
学习
代码游侠21 分钟前
数据结构——单向链表
linux·开发语言·数据结构·学习·算法·链表
卡兰芙的微笑25 分钟前
手写服务器与手写客户端相连接-qwen
学习
h***593326 分钟前
JAVA进阶 Thread学习06 synchronized关键字
java·开发语言·学习