当前位置: 首页 > news >正文

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

 题目

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

图解

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

2出队

3.分部代码解析

初始化

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;
}

全部可运行代码

#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.运行结果图

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

http://www.lryc.cn/news/459236.html

相关文章:

  • 系统架构设计师教程 第12章 12.4 信息系统架构案例分析 笔记
  • web1.0,web2.0,web3.0 有什么区别 详解
  • 将图片添加到 PDF 的 5 种方法
  • TiDB 优化器丨执行计划和 SQL 算子解读最佳实践
  • 初学51单片机之I2C总线与E2PROM以及UART简单实例应用
  • 软考高级软件架构师论文——论Web系统的测试技术及其应用
  • 快速总结AFPN
  • Linux 内核中USB鼠标枚举失败问题总结
  • 十六进制转二进制
  • Python保存CSV文件,Excel打开后中文乱码
  • 数据湖数据仓库数据集市数据清理以及DataOps
  • 「Ubuntu」文件权限说明(drwxr-xr-x)
  • JS-学生管理系统(功能实现)
  • C# 屏幕录制工具
  • 前端开发攻略---前端ocr图片文字提取功能
  • 平凯星辰亮相 2024开放原子开源生态大会,分享开源教育及社区治理经验
  • OCR经典神经网络(二)文本检测算法DBNet算法原理及其在icdar15数据集上的应用
  • 论文笔记:Prompt-Based Meta-Learning For Few-shot Text Classification
  • 光耦知识分享 | AC晶体管光耦在照明控制领域的应用与选型推荐
  • RBTree(红黑树)的介绍和实现
  • 信息安全数学基础(30)指数及其基本性质
  • Android开发首页底部tab切换图标有动画效果
  • Web前端高级工程师培训:异步处理专题
  • ESP32-C3实现热点并在浏览器中输入域名访问网页
  • 基于Python的自然语言处理系列(32):spaCy属性扩展
  • STM32 输入捕获模式详解:PWM 输入捕获与 PWI 模式(续篇)
  • 【C++】set/map(重点解析)
  • 【算法篇】动态规划类(1)(笔记)
  • mysql学习教程,从入门到精通,SQL 约束(Constraints)(41)
  • 使用CSS3与JavaScript实现炫酷的3D旋转魔方及九宫格交换动效