针对考研的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.运行结果图

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

相关推荐
wljy11 天前
二、进制状态转换
linux·运维·服务器·c语言·c++
小新同学^O^1 天前
简单学习 --> 模型参数
学习·llm·大模型参数
01_ice1 天前
C语言数据在内存中的存储
c语言·开发语言
cdbqss11 天前
VB2026 菜单生成基类 BqGetMenuStrip
数据库·经验分享·学习·oracle·vb
bucenggaibian1 天前
《C语言》编程前置:计算机底层逻辑(诞生的基础)
c语言·程序框架·编译运行·内存地址·底层逻辑
吃好睡好便好1 天前
创建魔方矩阵和单位矩阵
开发语言·人工智能·学习·线性代数·matlab·矩阵
星夜夏空991 天前
STM32单片机学习(21) —— I2C通信
stm32·单片机·学习
小娄~~1 天前
C语言卷子错题集
c语言·开发语言·数据结构
searchforAI1 天前
B站视频转笔记用哪个工具?2026年四款AI笔记工具对比实测
人工智能·经验分享·笔记·gpt·学习·视频总结·ai笔记
爱上好庆祝1 天前
学习JS第十一天(JS的进阶)
前端·javascript·学习