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

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

相关推荐
whoarethenext11 分钟前
使用 C/C++的OpenCV 实时播放火柴人爱心舞蹈动画
c语言·c++·opencv
能工智人小辰26 分钟前
Codeforces Round 509 (Div. 2) C. Coffee Break
c语言·c++·算法
whoarethenext1 小时前
C++ OpenCV 学习路线图
c++·opencv·学习
恰薯条的屑海鸥2 小时前
零基础在实践中学习网络安全-皮卡丘靶场(第十四期-XXE模块)
网络·学习·安全·web安全·渗透测试
Lester_11012 小时前
嵌入式学习笔记 - freeRTOS vTaskPlaceOnEventList()函数解析
笔记·学习
moxiaoran57533 小时前
uni-app学习笔记二十三--交互反馈showToast用法
笔记·学习·uni-app
iCxhust5 小时前
Prj10--8088单板机C语言8259测试(1)
c语言·开发语言
apocelipes10 小时前
Linux c 运行时获取动态库所在路径
linux·c语言·linux编程
恰薯条的屑海鸥11 小时前
零基础在实践中学习网络安全-皮卡丘靶场(第十六期-SSRF模块)
数据库·学习·安全·web安全·渗透测试·网络安全学习
int型码农11 小时前
数据结构第八章(一) 插入排序
c语言·数据结构·算法·排序算法·希尔排序