码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 王道数据结构C语言双链表基本操作实现


    文章目录

    • 一、定义
    • 二、初始化
    • 三、判空
    • 四、插入
    • 五、删除


    一、定义

    #define _CRT_SECURE_NO_WARNINGS
    #include
    #include
    typedef struct {//双链表结点类型
    	int data;//数据域
    	DNode* prior;//前驱
    	DNode* next;//后继
    }DNode,*DLinkList;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    二、初始化

    //初始化(带头结点)
    bool InitDLinkList(DLinkList *L) {
    	(*L) = (DNode*)malloc(sizeof(DNode));
    	if (*L == NULL) {
    		return false;//内存不足,分配失败
    	}
    	(*L)->prior = NULL;//头结点prior永远是NULL
    	(*L)->next = NULL;//当前头结点的后继暂时还没有结点
    	return true;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    三、判空

    //双链表判空
    //就看它的头结点的next是否为空就行
    bool Empty(DLinkList L) {
    	if (L->next == NULL) {
    		return true;
    	}
    	else {
    		return false;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    四、插入

    给p结点和s结点,要求在p之后插入s

    对于双链表插入有个口诀:先右边再左边,先连后断
    就是先把s和右边的结点全处理完
    再处理s和左边的结点(p)

    示意图如下:
    先处理右边
    第一步:先连
    在这里插入图片描述
    第二步:后断
    在这里插入图片描述
    再处理左边
    第三步:先连
    在这里插入图片描述

    第四步:后断
    在这里插入图片描述
    上面步骤也不唯一,但是也不是任意的,必须保证第12步在第4步之前执行
    如果只是简单实现,就用我上面的口诀:先右边再左边,先连后断

    //插入
    //在p结点后插入s结点
    bool InsertNextDNode(DNode* p, DNode* s) {
    	if (p == NULL || s == NULL) {//非法参数
    		return false;
    	}
    	//先处理右边
    	//先连
    	s->next = p->next;
    	//后断
    	if (p->next != NULL) {
    		//这里优化一下,防止p后面没有结点是NULL,那你插了s之后,NULL是不需要指向s的
    		p->next->prior = s;
    	}
    	//再处理左边
    	//先连
    	s->prior = p;
    	//后断
    	p->next = s;
    	return true;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    五、删除

    给结点p,让你删它的后继结点q
    这个和单链表删除大差不差,都挺简单的

    在这里插入图片描述
    先让p连上q的后继结点
    在这里插入图片描述
    然后q后继结点的前驱连上p
    在这里插入图片描述
    最后把q释放掉就完了
    在这里插入图片描述

    bool DeleteNextDNode(DNode* p) {//给p,删它后面一个结点
    	if (p == NULL) {//非法输入
    		return false;
    	}
    	DNode* q = p->next;
    	if (q == NULL) {//p后面没有结点
    		return false;
    	}
    	p->next = q->next;
    	if (q->next != NULL) {//如果q后面没结点,就不用往前连了
    		q->next->priro = p;
    	}
    	free(q);
    	return true;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    Cadence的网格生成工具Pointwise 2023.2.3版本在Windows系统上的安装配置
    一文搞懂kubernetes Deployment之滚动更新、回滚应用及策略;
    2023年Word文档(包括doc文档和docx文档)解密的四种方法和提醒
    Android 自定义View - 柱状波形图 wave view
    【学生管理系统】整合JWT(完)
    微信小程序完整项目实战(前端+后端)
    (附源码)springboot校园商铺系统 毕业设计 052145
    (附源码)计算机毕业设计ssm《Python程序设计》教辅系统
    fpga内嵌逻辑分析仪使用方法
    springboot+jsp学生心理健康测评网
  • 原文地址:https://blog.csdn.net/m0_57180439/article/details/132895259
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号