循环链表1

循环链表的结构设计

循环链表就是——链表的头和尾连在一起

即最后一个数据(尾巴结点)的next由单链表的NULL,变为现在循环链表的存储头结点plist的地址200,尾巴结点指向头结点

现在来建立循环链表clist

先写结构设计

现在看对于循环链表有哪些操作——可以将原来的单链表一一复制过来

因为线性表(到现在为止顺序表,单链表,循环链表)其对外的操作都是一样的。

#pragma once//循环链表
//struct是结点的样子
typedef struct CNode
{int data;struct CNode* next;
}CNode,*CList;//CList是名字不是类型,所以是*CList而不是CList*
//而CNode是类型,所以CList==CNode*//链表的基本实现操作(常用的),应用操作一般不放在这里面//可以将链表的复制过来//初始化
void InitCList(CList plsit);//Init:初始化。链表结构体指针数据类型+其定义  的变量,名字为plsit//头插(插入在头结点后面的第一个有效数据的位置上)
bool Insert_head(CList plist, int val);//尾插
bool Insert_tail(CList plist, int val);//插入数据,在链表plsit的pos位置插入val数据元素
//插入操作有2种结果,插入成功或失败,所以其插入函数原型是bool类型,只返回2种结果
bool Insert(CList plsit, int pos, int val);//参数就是实现这个函数的使用需要外界提供给它的数据东西//判空(判断链表是否为空)
bool IsEmpty(CList plsit);//获取数据结点的个数
int Getlength(CList plsit);//在链表plsit中 查找第一个key值,找到返回key值的结点地址,没有找到返回空NULL
//所以其查找的返回类型为Node*
CNode* Search(CList plsit, int key);//删除链表plsit中pos位置的值,删除跟插入一样成功或失败2种结果
bool DelPos(CList plsit, int pos);//删除第一个val的值
bool DelVal(CList plsit, int val);//返回key的前驱地址,如果不存在(key无前驱,在表头)返回NULL
CNode* GetPrio(CList plsit, int key);//返回key的后继下标,如果不存在(key无后继,在表尾)返回NULL
CNode* GetNext(CList plsit, int key);//输出链表,不是对链表内部的操作,但为了展示我们对链表的操作是否正确,有时要输出看一下
void Show(CList plsit);//清空链表中的数据
void Clear(CList plsit);//销毁整个链表内存(交回)
void Destroy(CList plsit);

这里说一下清空和销毁

再销毁时,有时候会调用清空函数,有时候又不调用清空函数;清空时的调用同理。

那么什么时候需要调用它——在清空就能达到销毁整个动态内存的的要求时,就可以调用它。

在定长顺序表里面,就可以调用——是因为定长顺序表里面就没有动态内存

在可扩容顺序表里面,清空函数不能销毁malloc出来的东西,需要free,所以不能调用

在单链表里面,清空数据调用销毁函数能够达到清空的要求,那么直接调用就行

所有链式结构里面的销毁方法——总是删除free第一个结点(每个数据结点都会变成第一个结点)

而头结点是从外面(int main)传进来的main函数结束后return 0,里面的东西就自动销毁了。

如上图,有的会在初始化这里malloc一个plist,那么此时的头结点就不是临时结点了,

在销毁时,它也就需要free了

————一个malloc对应一个free

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/178003.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动态获取填充表格数据时的特定值的赋值

1、如图 <el-tablev-loading"loading":data"columnList"bordertooltip-effect"dark":size"tableSize":height"tableHeight"style"width: 100%; margin: 15px 0"><el-table-column type"selection…

上机实验三 图的最小生成树算法设计 西安石油大学数据结构

二叉树设计 实验名称&#xff1a;二叉树设计 &#xff08;1&#xff09;实验目的&#xff1a; 1&#xff09; 掌握二叉树的逻辑结构。 2&#xff09; 掌握二叉树的二叉链表存储结构&#xff1b; 3&#xff09; 掌握基于二叉链表存储的二叉树的遍历等操作的实现。 &#x…

windows版:TensorRT安装教程

查看版本对应cuda与TensorRT&#xff1a;https://blog.csdn.net/weixin_41540237/article/details/131589929 TensorRT 下载地址&#xff1a;https://developer.nvidia.com/nvidia-tensorrt-7x-download cudnn下载地址&#xff1a;https://developer.nvidia.com/rdp/cudnn-ar…

CV计算机视觉每日开源代码Paper with code速览-2023.11.13

精华置顶 墙裂推荐&#xff01;小白如何1个月系统学习CV核心知识&#xff1a;链接 点击CV计算机视觉&#xff0c;关注更多CV干货 论文已打包&#xff0c;点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【基础网络架构&#xff1a;Transformer】PolyMaX: Gener…

【蓝桥杯软件赛 零基础备赛20周】第3周——填空题

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 文章目录 00. 2023年第14届参赛数据0. 上一周答疑1. 填空…

ICC2/innovus merge gds

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 calibre merge gds的方法示例参考往期文章: Calibre Merge GDS ICC2: write_gds -merge_files "std.gds sram.gds io.gds ip.gds ... ..." innovus: streamout -…

Ubuntu 搜狗输入法无法输入中文解决方案(不需要重装,不需要重启服务器)

Ubuntu 搜狗输入法突然无法输入中文&#xff0c;上午还好用&#xff0c;下午就不好用了&#xff0c;直接上解决方案 1.终端输入pidof fcitx找到搜狗的进程&#xff0c;如下图红框中的就是进程 2.直接杀掉这个进程 3.其实到第二步&#xff0c;如果搜狗输入法自动重启了&#xf…

【案例】由coredump引起的思考:程序的加载流程

背景 小米项目的同事&#xff0c;最近遇到了一个crash问题&#xff0c;困扰较久&#xff0c;向我请求帮助。&#xff08;其实是客户指定要求我来分析这个问题&#xff0c;该项目之前是由我负责的&#xff0c;帮客户解决很多较多crash问题。估计是实力得到了客户认可吧&#xff…

OSG编程指南<一>:OpenSceneGraph 概述

1. OpenSceneGraph 简介 OSG 是一个开源的场景图形管理开发库,主要为图形图像应用程序的开发提供场景管理和图形渲染优化功能。它使用可移植的 ANSI C++编写,并使用已成为工业标准的 OpenGL 底层渲染 API。因此,OSG 具备跨平台性,可以运行在Windows、Mac OS X 和大多数类型…

Power Apps-使用power Automate流

创建&#xff1a;Power Automate-创建power Apps使用的流-CSDN博客 打开Power Apps&#xff0c;创建页面&#xff0c;添加三个输入框&#xff08;分别是换算前单位、换算后单位、货币数&#xff09;&#xff0c;和一个文本框&#xff08;输出结果&#xff09;以及一个按钮 在…

瑞吉外卖01-实现管理端登录登出功能

开发前准备 准备数据表 结合页面原型创建数据库reggie,可以使用图形化界面或者MySQL命令运行SQL文件导入表结构(使用命令时sql文件不要放在中文目录中) 创建工程 创建一个SpringBoot的工程(勾选Spring Web&#xff0c;MySQL和MyBatis),配置pom.xml文件导入druid&#xff0c;…

JumpServer2023漏洞复现合集

本文主要复现JumpServer2023年出现的大批量漏洞&#xff0c;既是分享也是为了记录自己的成长&#xff0c;近期会持续更新。 1. JumpServer MongoDB远程代码执行漏洞&#xff08;CVE-2023-43651&#xff09; 1.1 漏洞级别 高危 1.2 漏洞描述 经过身份验证的用户可以利用Mon…