【数据结构】‘双向链表’冲冲冲

在这里插入图片描述

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤
📃个人主页 :阿然成长日记 👈点击可跳转
📆 个人专栏: 🔹数据结构与算法🔹C语言进阶
🚩 不能则学,不知则问,耻于问人,决无长进
🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍

文章目录

  • 构建节点
  • 初始化
  • 打印
  • 尾插
  • 尾删
  • 头插
  • 头删
  • 计算链表长度
  • 查找
  • pos位置插入(一般都是pos之前)
  • 删除pos位置
  • 删除时的注意点

构建节点

//构建节点
LTNode* BuyLTNode(LTDataType x)
{LTNode* newnode = (LTNode*)malloc(sizeof(LTNode));if (newnode == NULL){perror("newnode fail");exit(-1);}newnode->data = x;return newnode;
}

初始化

我们的节点是双向循环链表

//初始化
LTNode* LTInit()
{LTNode* phead = BuyLTNode(-1);phead->next = phead;phead->prev = phead;return phead;
}

打印

//打印
void print(LTNode* phead)
{assert(phead);printf("phead<=>");LTNode* cur = phead->next;while (cur != phead){printf("%d<=>", cur->data);cur = cur->next;}printf("\n");
}

尾插

思路:
在这里插入图片描述
代码:

void LTPushBack(LTNode* phead, LTDataType x)
{assert(phead);LTNode* tail = phead->prev;LTNode* newnode = BuyLTNode(x);newnode->prev = tail;tail->next = newnode;newnode->next = phead;phead->prev = newnode;
}

尾删

思路:
在这里插入图片描述
代码:

//尾删
void LTPopBack(LTNode* phead)
{assert(phead);assert(phead->prev!=phead);LTNode* cur = phead->prev->prev;free(cur->next);cur->next = phead;phead->prev = cur;
}

运行结果:
在这里插入图片描述

头插

思路:
在这里插入图片描述

代码;

//头插
void LTPushFront(LTNode* phead, LTDataType x)
{assert(phead);LTNode* newnode = BuyLTNode(x);//先改newnode节点后newnode->next = phead->next;phead->next->prev = newnode;//在改前newnode->prev = phead;phead->next = newnode;}

运行结果:

在这里插入图片描述

头删

思路:
在这里插入图片描述

代码:

//头删
void LTPopFront(LTNode* phead)
{assert(phead);assert(phead->next != phead);LTNode* cur = phead->next->next;free(phead->next);//链接顺序不能变phead->next = cur;phead = cur->prev;
}

运行结果:
在这里插入图片描述

计算链表长度

//如果让哨兵节点的内容是链表长度 ,那么,data的数据类型必须是int型。

//链表长度
//如果让哨兵节点的内容是链表长度 ,那么,data的数据类型必须是int型。
int LTSize(LTNode* phead)
{int size = 0;LTNode* cur = phead->next;while (cur != phead){size++;cur = cur->next;}return size;
}

在这里插入图片描述

查找

pos位置插入(一般都是pos之前)

思路:
在这里插入图片描述
代码:

//pos位置插入(一般都是pos之前)
void LTInsert(LTNode* pos, LTDataType x)
{assert(pos);LTNode* newnode = BuyLTNode(x);LTNode* cur = pos->prev;//先链接newnode后newnode->next = pos;pos->prev = newnode;//再链接newnode前cur->next = newnode;newnode->prev = cur;
}

删除pos位置

思路:在这里插入图片描述代码:

//删除pos位置
void LTErase(LTNode* pos)
{assert(pos);LTNode* posprev = pos->prev;LTNode* posnext = pos->next;free(pos);//链接顺序不能变posprev->next = posnext;posnext->prev = posprev;
}

删除时的注意点

在这里插入图片描述

链接顺序不能变的原因: 如果先posnext->prev = posprev;
此时posnext->prev仍然指向原来pos节点地址,
因为我们free的是pos节点内容,他的地址仍在,
不会改变其他节点的指向。

那么等于posprev又重新指向了pos地址,
所以在打印时,会出现一串地址

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

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

相关文章

Mybatis-Plus

1. Mybatis-Plus概念 1.1 Mybatis-Plus介绍 官⽹&#xff1a; https://mybatis.plus/ 或 https://mp.baomidou.com/ Mybatis-Plus 介绍 MyBatis-Plus &#xff08;简称 MP &#xff09;是⼀个 MyBatis 的增强⼯具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;…

“可一学院”区块链学习平台正式启动,助力BSV技术普及与传播

2023年8月8日&#xff0c;上海可一澈科技有限公司&#xff08;以下简称“可一科技”&#xff09; 正式发布区块链学习平台“可一学院”。“可一学院” 立足于BSV区块链技术本源&#xff0c;汇集了多层次的专业课程和学习资源&#xff0c;致力于打造一个适合各类人群使用的一站式…

SpringMVC关于SSM的整合配置步骤

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaweb 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 SSM整合 一、创建工程1.1创建Maven工程1.2工程命名1.3检查…

Spring Boot 项目实现 Spring AOP

【注】实现在SpringBoot项目中&#xff0c;同时给两个类的方法添加AOP前置通知 1、创建一个SpringBoot项目 2、创建两个目标类和方法 package com.tqazy.learn_spring_project.spring_aop;import org.springframework.stereotype.Service;/*** ClassName SpringAopUserServi…

JZ40最小的K个数

题目地址&#xff1a;最小的K个数_牛客题霸_牛客网 题目回顾&#xff1a; 解题思路&#xff1a; 注意本题不需要去重。 最简单的方法&#xff1a;排序后数组顺序是由小到大的&#xff0c;也就是说此时数组前k个数就是我们要求的结果。 整体代码&#xff1a; public ArrayLi…

【Linux从入门到精通】文件I/O操作(C语言vs系统调用)

文章目录 一、C语言的文件IO相关函数操作 1、1 fopen与fclose 1、2 fwrite 1、3 fprintf与fscanf 1、4 fgets与fputs 二、系统调用相关接口 2、1 open与close 2、2 write和read 三、简易模拟实现cat指令 四、总结 &#x1f64b;‍♂️ 作者&#xff1a;Ggggggtm &#x1f64b;‍…

MySQL多表查询

1.创建student和score表 创建score表 2.为student表和score表增加记录 向student表插入记录的INSERT语句如下&#xff1a; 向score表插入记录的INSERT语句如下&#xff1a; 1.查询student表的所有记录 2.查询student表的第2条到4条记录 3.从student表查询所有学生的学号&#…

图·c++

数据结构&#xff1a; 邻接矩阵&#xff0c;邻接表 1.图的存储方式&#xff1a;邻接矩阵&#xff0c;邻接表 1.稀疏图和稠密图 2.无向图&#xff1a; n n n 个点&#xff0c;最多 n ( n − 1 ) / 2 n(n-1)/2 n(n−1)/2 条边&#xff0c; 当 m m m 接近 n ( n − 1 ) / 2 …

【JVM】CPU飙高排查方案与思路

文章目录 CPU飙高排查方案与思路 CPU飙高排查方案与思路 1.使用top命令查看占用cpu的情况 2.通过top命令查看后&#xff0c;可以查看是哪一个进程占用cpu较高&#xff0c;上图所示的进程为&#xff1a;40940 3.查看进程中的线程信息 4.可以根据进程 id 找到有问题的线程&a…

积木报表集成前端加载js文件404

项目场景&#xff1a; 在集成积木报表和shiro时候&#xff1a; 集成积木报表&#xff0c;shrio&#xff0c;shrio是定义在另一个模块下的&#xff0c;供另一个启动类使用&#xff0c;积木报表集成shrio的时候&#xff0c;需要依赖存放shrio的核心包&#xff0c;该核心包除了存…

React构建的JS优化思路

背景 之前个人博客搭建时&#xff0c;发现页面加载要5s才能完成并显示 问题 React生成的JS有1.4M&#xff0c;对于个人博客服务器的带宽来说&#xff0c;压力较大&#xff0c;因此耗费了5S的时间 优化思路 解决React生成的JS大小&#xff0c;因为我用的是react-router-dom…

到 2030 年API 攻击预计将激增近 1000%

导读云原生应用程序编程接口管理公司 Kong 联合外部经济学家的最新研究预计&#xff0c;截至 2030 年 API 攻击将激增 996%&#xff0c;意味着与 API 相关的网络威胁的频率和强度都显着升级。 这项研究由 Kong 分析师和布朗大学副教授 Christopher Whaley 博士合作进行&#x…

webpack 热更新的实现原理

webpack 的热更新⼜称热替换&#xff08;Hot Module Replacement&#xff09;&#xff0c;缩写为HMR。这个机制可以做到不⽤刷新浏览器⽽将新变更的模块替换掉旧的模块。 原理&#xff1a; ⾸先要知道 server 端和 client 端都做了处理⼯作&#xff1a; 在 webpack 的 watch…

docker案例复现

$uri导致的CRLF注入漏洞 前期准备dockerdocker compose 漏洞配置 前期准备 docker 要完成这样的测试&#xff0c;需要我们有一定的环境&#xff0c;也就是需要大家去安装docker 更新系统软件包&#xff1a; sudo yum update 安装 Docker 的依赖软件包&#xff1a; sudo yum …

Ubuntu 20.04(服务器版)安装 Anaconda

0、Anaconda介绍 Anaconda是一个开源的Python发行版本&#xff0c;包含了包括Python、Conda、科学计算库等180多个科学包及其依赖项。因此&#xff0c;安装了Anaconda就不用再单独安装CUDA、Python等。 CUDA&#xff0c;在进行深度学习的时候&#xff0c;需要用到GPU&#xf…

百度云盘发展历程与影响

摘要&#xff1a; 百度云盘作为中国领先的云存储与共享服务提供商&#xff0c;自其创立至今经历了多个阶段的发展与变革。本论文通过对百度云盘的历史回顾与分析&#xff0c;探讨了其在技术、商业模式、用户体验以及对社会的影响等方面的演变。同时&#xff0c;还分析了在竞争激…

Easy Rules规则引擎(1-基础篇)

目录 一、序言二、Easy Rules介绍三、定义规则(Rules)1、规则介绍2、编程式规则定义3、声明式规则定义 四、定义事实(Facts)五、定义规则引擎(Rules Engine)1、规则引擎介绍2、InferenceRulesEngine规则引擎示例(1) 定义触发条件(2) 定义规则触发后的执行行为(3) 测试用例 一、…

79. 单词搜索

题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 解题思路&#xff1a;递归回溯 首先遍历每一个board中的字符&#xff0c;如果该字符合word的第一个字符相等&#xff0c;就从这个位置进行匹配搜索&#xff0c;如果能够找到word&…

DataGrip 安装 与 连接MySQL数据库

DataGrip 安装 与 连接MySQL数据库 Jetbrains是著名的编程工具商业软件提供商&#xff0c;旗下有很多软件。包括IDE、团队开发工具、插件和微软.Net辅助工具、包括自创语言Kotlin等。我们通常用的和说的全家桶&#xff0c;主要就是指它的IDE套件。Jetbrains的IDE工具都支持跨平…

【算法——双指针】LeetCode 283 移动零

题目描述&#xff1a; 思路&#xff1a; (双指针) O(n)O(n)O(n) 给定一个数组 nums&#xff0c;要求我们将所有的 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 如图所示&#xff0c;数组nums [0,1,0,3,12]&#xff0c;移动完成后变成nums [1,3,12,0,0] &am…