网站页面禁止访问制作网页的网站

news/2025/9/29 3:54:45/文章来源:
网站页面禁止访问,制作网页的网站,网站备案收费标准,在wordpress中 密码目录 前言 一、带哨兵的循环双向链表是什么 二、链表的实现 2.1规定结构体 2.2创建节点 2.3初始化 2.4打印 2.5检验是否为空 2.6销毁链表 2.7尾插 2.8尾删 2.9头插 2.10头删 2.11寻找特定节点 2.12任意位置插入#xff08;pos前#xff09; 2.13删除任意节点 …目录 前言 一、带哨兵的循环双向链表是什么 二、链表的实现 2.1规定结构体 2.2创建节点 2.3初始化 2.4打印 2.5检验是否为空 2.6销毁链表 2.7尾插 2.8尾删 2.9头插 2.10头删 2.11寻找特定节点 2.12任意位置插入pos前 2.13删除任意节点 总结 前言 前面我们学习了单链表的一些知识由单链表引申出双向链表同时带哨兵位或者不带哨兵位是两种但大差不差这里学习一下带哨兵位的循环双向链表。 其实有很多链表的结构组成它们的也就是循环非循环带哨兵位不带哨兵位双向还是单向。 一、带哨兵的循环双向链表是什么 无哨兵单向非循环链表结构简单也就是我们常说的单链表一般不会用来单独存数据实际中更多是作为其它数据的子结构如哈希桶图的邻接表等等。 而带哨兵双向循环链表结构最复杂一般用来单独存储数据实际中使用的链表数据结构都是带哨兵头双向链表另外这个结构虽然复杂但是使用代码实现以后会发现结构带来很多优势实现反而简单了。 二、链表的实现 这里我们要实现的有 //创建节点 LTNode* BuyListNode(LTDataType x) //初始化 LTNode* LTInit(); //打印 void LTPrint(LTNode* phead); //销毁链表 void LTDestory(LTNode* phead); //检验是否为空 bool LTEmpty(LTNode* phead) //尾插尾删 void LTPushBack(LTNode* phead, LTDataType x); void LTPopBack(LTNode* phead); //检验链表是否为空 bool LTEmpty(LTNode* phead); //头插头删 void LTPushFront(LTNode* phead, LTDataType x); void LTPopFront(LTNode* phead); //在pos之前加入一个值 void LTInsert(LTNode* pos, LTDataType x); //删除节点 void LTErase(LTNode* pos); //寻找特定节点 LTNode* LTFind(LTNode* phead, LTDataType x); 2.1规定结构体 要想实现一个链表就要首先规定一下每一个节点的结构体组成部分这里我们先使用结构体来定义一下。 每一个节点内包括数据域头指针和尾指针。 typedef int LTDataType;typedef struct ListNode {struct ListNode* next;//头指针struct ListNode* prev;//尾指针LTDataType data;//数据 }LTNode; 基于这个结构我们就可以实现后期的一系列操作内容包括哨兵位的创建。 2.2创建节点 这里我们命名为BuyListNode返回类型为结构体也就是LTNode*通过传入一个数据LTDataType x从而实现对节点的创建。 LTNode* BuyListNode(LTDataType x) {LTNode* node (LTNode*)malloc(sizeof(LTNode));if (node NULL){perror(malloc fail);return NULL;}node-next NULL;node-prev NULL;node-data x;return node; } 通过malloc分配一个节点的内存然后把头指针尾指针都赋为空因为这里不知道头尾指针指向谁把传入数据最后返回节点。 2.3初始化 初始化就是初始化一个哨兵位节点也就是一个头这里把哨兵位数据定义为-1头尾指针指向自己因为这里是双向循环链表返回此节点。 //初始化 LTNode* LTInit() {LTNode* phead BuyListNode(-1);phead-next phead;phead-prev phead;return phead; } 2.4打印 打印这里就是不断访问当前节点的下一个节点之后打印此节点的数据。 //打印 void LTPrint(LTNode* phead) {assert(phead);LTNode* cur phead-next;printf(head);while (cur ! phead){printf(%d, cur-data);cur cur-next;} } 这里为了形象打印出来的后面会接上一个来代表双向循环链表。 2.5检验是否为空 通过一个布尔值来检验是否为空主要就是检查哨兵位有没有。 //检验是否为空 bool LTEmpty(LTNode* phead) {assert(phead);return phead-next phead; } 2.6销毁链表 我们用 LTDestory来作为销毁链表的函数名字。实际上销毁链表就是先把除了哨兵位头节点以外的所有节点删除释放最后再释放哨兵位实现是这么实现的 //销毁释放 void LTDestory(LTNode* phead) {assert(phead);LTNode* cur phead-next;while (cur ! phead){LTNode* next cur-next;free(cur);cur next;}free(phead);phead NULL; } 先检查是否有节点然后把当前cur节点定义为哨兵位的下一个节点如果cur不为哨兵位因为是循环链表所以最后肯定有一个时间它的尾节点一定指向自己在循环里面先用next节点记住cur当前节点的下一个节点然后释放掉当前节点再把之前定义的next赋给当前节点就相当于cur不断再往后走不断再释放最后到了循环结束的条件后释放一下哨兵位就可以实现全部释放。 2.7尾插 这个尾插实现就基于之前创建节点的函数BuyListNode先创建节点找到尾节点后再进行修改。 //尾插 void LTPushBack(LTNode* phead, LTDataType x) {assert(phead);LTNode* newnode BuyListNode(x);LTNode* tail phead-prev;//找尾节点tail-next newnode;newnode-prev tail;newnode-next phead;phead-prev newnode;} 用newnode来代表要插入的新节点找到尾节点因为哨兵位的头指针指向最后一个节点这时候把新的newnode插入到尾节点后面就可以注意此时新的节点成为了尾节点所以要更新一下头尾指针的指向关系。 2.8尾删 尾删就是找到当前尾节点然后把尾节点的上一个节点作为最后一个节点更新当前节点的头尾指针删除当前尾节点。 //尾删 void LTPopBack(LTNode* phead) {assert(phead);assert(!LTEmpty(phead));LTNode* tail phead-prev;LTNode* tailPrev tail-prev;tailPrev-next phead;phead-prev tailPrev;free(tail);tail NULL;} 当然这里也要断言一下看看是否为空为空就不需要删除。 2.9头插 头插实际上就是在哨兵位的下一个节点插入实现过程就是类似链表的插入一样。 //头插 void LTPushFront(LTNode* phead, LTDataType x) {assert(phead);LTNode* newnode BuyListNode(x);phead-next-prev newnode;newnode-next phead-next;phead-next newnode;newnode-prev phead;} 插入进去后更新前后指针的指向就可以。 2.10头删 头删就是指定哨兵位的下一个节点然后这个节点的下一个节点的头指针更新指向哨兵位哨兵位的下一节点指向它就然后释放掉刚才的头节点可以。 //头删 void LTPopFront(LTNode* phead) {assert(phead);LTNode* destorynode phead-next;phead-next-next-prev phead;phead-next phead-next-next;free(destorynode);destorynode NULL; } 上面给出了头删的代码。 2.11寻找特定节点 寻找特定节点就是通过数据x寻找之后返回一个节点的地址这里就是通过一个循环寻找的特定节点然后返回。 //寻找特定节点 LTNode* LTFind(LTNode* phead, LTDataType x) {assert(phead);//带头双向循环是定不为空的LTNode* cur phead-next;while (cur ! phead){if (cur-data x){return cur;}cur cur-next;}return NULL; } 2.12任意位置插入pos前 基于之前的寻找特定的节点以及新节点的创建在这里对新节点进行插入插入到pos的下一个节点并且更新指针。 //任意位置插入 void LTInsert(LTNode* pos, LTDataType x) {assert(pos);LTNode* prev pos-prev;LTNode* newnode BuyListNode(x);prev-next newnode;newnode-prev prev;newnode-next pos;pos-prev newnode; }2.13删除任意节点 通过传入一个pos节点进行删除逻辑和前面的删除差不多。 //删除节点 void LTErase(LTNode* pos) {assert(pos);LTNode* p pos-prev;LTNode* n pos-next;p-next n;n-prev p;free(pos);pos NULL; } 总结 这里对循环有哨兵位双链表进行基本功能的编写和学习。

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

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

相关文章

上饶专业做网站建设网站做专业团队

vue项目初始化 vue create mytest 启动项目以后 组件开发 开发的组件写在 package中 如下如例 开发一个 listpage的组件 里面放了一个a链接注册组件配置打包 "package": "vue-cli-service build --target lib ./src/package/index.js --name managerpage -…

个人备案网站能做商城吗网站制作多少钱一年

随着全球对节能环保意识的增强,LED显示屏行业也在积极探索更加节能的生产和使用方式。作为显示屏制造厂家,了解和应用LED节能原理不仅是市场的需求,也是企业履行社会责任的表现。本文将浅析LED节能原理及其在显示屏制造中的应用。 LED节能的基…

phpcms v9网站建设做网站海报

上一个博文中,我提到如何使用 OpenTelemery 的特定语言 API 来收集遥测数据,包含手动和自动的埋点技术,这很重要!但是,收集遥测数据只是解决方案的第一步。 你需要把遥测数据路由转发到其他地方,同时添加额…

南通影楼网站建设高端网站策划公司

激光雷达(LiDAR)是一种通过发射激光束并测量反射回来的时间来测量目标距离和形状的传感器。为了提高激光雷达的感知精度和稳定性,需要进行激光雷达标定,以确定其激光束的准确性和稳定性。 如果没有激光雷达,自动驾驶的…

网站开发的毕业周记Wordpress禁止搜索内容

原文链接:https://zhuanlan.zhihu.com/p/174469951本篇将 Hive 的优化分成三个部分:第一部分是 SQL 通用语法优化,第二部分是针对 Hive 所具有的数据倾斜的优化,第三部分则介绍一些通用性的 Hive 参数设置优化。一、语法优化 SQL 的语法优化本…

大网站建设个人网站图片

RabbitMQ通过生产者、消费者以及MQ Broker达到了解耦的特点,实现了异步通讯等一些优点,但是在消息的传递中引入了MQ Broker必然会带来一些其他问题,比如如何保证消息在传输过程中可靠性(即不让数据丢失,发送一次消息就…

企业网站建设方案书 备案深圳品牌公寓有哪些

[vue] v-model是什么?有什么用呢? 一则语法糖,相当于v-bind:value"xxx" 和 input,意思是绑定了一个value属性的值,子组件可对value属性监听,通过$emit(input, xxx)的方式给父组件通讯。自己实现…

网站建设合同 下载软装公司网站建设

需求背景 Ubuntu机器需要动态根据插入的U盘进行导入数据, 路径是约定为U盘内的固定路径. 但是服务是docker服务, 插入U盘并不会直接挂在到容器内部, 需要重启容器才能生效, 每次手动重启很麻烦, 自动检测U盘路径变化来操作容器. 配置动态监控脚本和服务 编写脚本 vim moni…

一个企业做网站的意义巨鹿企业做网站

兼容中文编码 由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。 当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文…

帮人做ppt的网站如何做品牌推广方案

我这里是连接的阿里云服务器上的redis 1.阿里云服务器的安全组打开6379端口 2. 修改redis.config配置 注释掉 # bind 127.0.0.1 将 protected-mode yes 改为:protected-mode no3. 防火墙配置开启6379端口访问 在linux中执行: /sbin/iptables -I INPU…

百度免费推广网站网页开发公司网站

什么是VNode VNode的全称是Virtual Node,也就是虚拟节点.它是指一个抽象的节点对象,用于描述真实DOM中的元素。在前端框架中,通过操作VNode来实现虚拟DOM,从而提高性能。 VNode的本质 本质上是JavaScript对象,这个对象就是更加轻量级的对DOM…

徐州网站建设石家庄百度推广家庄网站建设

目录 1.安装kafka 2.安装kafkamanager可视化工具 3.springboot整合kafka 1.pom导包 2.启动类和yml配置 3.代码演示 编写生产者: 消费者: 1.安装kafka 进入kafka官网下载对应版本kafka kafka官网地址:Apache Kafka kafka是使用Scal…

观澜做网站网站建设 团队

侃侃尔雅您无需成为系统应用程序。首先,com.android.internal.telephony在您的项目中创建包,并将其放入名为“ ITelephony.aidl” 的文件中:package com.android.internal.telephony; interface ITelephony { boolean endCall(); vo…

网站备案号怎么查询东道设计考研

项目的大致需求就是做一个App,里面集成各种功能供用户使用,其中涉及到很多Vue的使用方法,单独总结太麻烦,所以通过这几篇笔记来梳理一下。原型图如下:路由配置主界面会用到一些原生App方法,比如验证用户身份…

网站seo分析常用的工具是南宁网站推广费用

大家好,我是若川。今天分享这篇,相信读完会有些收获。本文经作者授权转载,原文链接:https://juejin.cn/post/6980671091526074404个人简介19年底12月进入字节实习, 第二年7月毕业转正。到前几天正好全职一周年。进入公…

网站策划与建设阶段dedecms网站地图模板

CALDERA是一个由python语言编写的红蓝对抗工具(攻击模拟工具)。它是MITRE公司发起的一个研究项目,该工具的攻击流程是建立在ATT&CK攻击行为模型和知识库之上的,能够较真实地APT攻击行为模式。 通过CALDERA工具,安全…

北京网站建设公司哪个最好网站开发的最后五个阶段

问题来源 本周在实际项目中发现无法自定义的log4j-dev配置的error日志级别文件无法生效,项目启动后仍然采用默认的info级别日志进行打印。之所以自定义名称,是为了减少隔离不同环境的日志级别,比如开发dev环境使用debug、info级别&#xff0…

MySQL数据误删或者误更新如何恢复25-9-29

目录本篇文章适用场景一、下载MyFlash工具二、误删数据恢复先检查MySQL有没有开启binlog日志演示误删除数据利用MyFlash工具 反写SQL利用mysqlbinlog 执行反写的sql二进制文件恢复完成三、误更新数据恢复演示误更新数据…

东莞做网站 信科网络医院网站建设企业

Oracle Data Guard 参数介绍Data Guard作为Oracle提供的一个高可用及灾备解决方案,理解并可以实施它对于DBA来说是非常重要套的技能上节介绍了有关Data Guard的概念,这节将介绍相关的一些参数有的参数是做为备库角色时才生效的,会单独说出来1. DB_NAME该…

怎么注销网站备案上海网站seo排名优化

A 题:园区微电网风光储协调优化配置 摘要 在全球范围内,气候变化和环境污染问题日益严重,减少碳排放和实现可持续发展成为各国的共同目标。新能源,尤其是风能和光伏发电,因其清洁、可再生的特性,正在全球范…