双链表的相关操作

  • 双链表的定义
  • 双链表的插入(后插)
  • 双链表的删除
    • 销毁双链表
  • 双链表的遍历
    • 后向遍历
    • 前向遍历
    • 跳过头结点
  • 主函数

双链表的定义

typedef struct DNode {ElemType data;struct DNode* prior, * next;
}DNode, * DLinklist;
//----------双链表的初始化(带头结点)----------
bool InitDLinkList(DLinklist& L) {L = (DNode*)malloc(sizeof(DNode));   //分配一个头结点if (L == NULL)   //内存不足,分配失败return false;L->prior = NULL; //头结点的prior永远指向NULLL->next = NULL;  //头结点之后暂时还没有节点return true;
}

双链表的插入(后插)

//在p结点之后插入s结点
bool InsertNextNode(DNode* p, DNode* s) {if (p == NULL || s == NULL)    //非法参数return false;s->next = p->next;    //①将结点*s插入到结点*p之后if (p->next != NULL)   //如果p结点有后继结点p->next->prior = s;  //②s->prior = p;    //③p->next = s; //④return true;
}

按位序插入和前插操作都可以转化为后插操作

双链表的删除

bool DeleteNextNode(DNode* p) {if (p == NULL)  //非法参数return false;DNode* q = p->next;  //找到p的后继结点qif (q == NULL)return false;    //p没有后继p->next = q->next;    //①if (q->next != NULL) //q结点不是最后一个结点q->next->prior = p; //②free(q); //释放结点空间return true;
}

销毁双链表

void DestoryList(DLinklist& L) {//循环释放各个数据结点while (L->next != NULL)DeleteNextNode(L);free(L);    //释放头结点L = NULL;   //头指针指向NULL
}

双链表的遍历

后向遍历

while (p != NULL) {//对结点p做相应处理,如打印p = p->next;
}

前向遍历

while (p != NULL) {//对结点p做相应处理p = p->prior;
}

跳过头结点

while (p->prior != NULL) {//对结点p做相应处理p = p->prior;
}

双链表不可随机存储,时间复杂度O(n)

主函数

void testLinkList() {//初始化双链表DLinklist L;InitDLinkList(L);......
}

双链表的相关操作(定义,后插,删除,遍历)相关推荐

  1. 【Liunx常用操作】LVM逻辑卷的介绍和相关操作(创建、删除、扩缩容)

    [Liunx常用操作]LVM逻辑卷的介绍和相关操作 提示:为保证文章的正确性和实用性,文章内容作者会不断优化改进,若您有建议或者文章存在错误请留言或评论指正. 前言 LVM(Logical Volum ...

  2. 双链表初始化、头插、尾插、头删、尾删、任意位置插入和删除、判空、销毁、打印、查找操作

    ListNode* buyDListNode(LTDataType data) {ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));if ...

  3. 数据结构(单链表的相关操作)

    为什么80%的码农都做不了架构师?>>>    #include <stdio.h> #include <stdlib.h> #define ElemType ...

  4. 链表的相关操作-数据结构与算法(北航991数据结构)

    数据结构与算法(北航991数据结构) 下面的这一段代码是针对于这30道题而写的关于单向链表,双向链表以及循环链表等链表的创建及遍历,做辅助使用. 所有题目均是自己理解敲的,并执行成功的.可能会存在一起 ...

  5. 关于链表的相关操作与问题

    这篇博文仅记录有关链表的操作,供回忆与参考. 1.概述 链表在我看来是储存数据的工具,原理上讲表上每一个节点有两个属性,也可以说是格子,第一个存放数据,第二个存放下一个节点地址.最后一个节点只存放数据 ...

  6. redis进阶:mysql,redis双写一致性,数据库更新后再删除缓存就够了吗?

    0. 引言 最近线上的一个状态修改功能出现了问题,一开始是运营找了过来,运营告知某条数据的状态已经开启了的,但是实际使用起来还是没有生效,于是拿到这个问题后,首先就去数据库查了这条数据,发现确实如他所 ...

  7. python自动获取cookie_selenium3+python自动化12-cookie相关操作(获取和删除)

    前言 在进行接口测试或者自动化测试时,有时就要登录好多次,特别麻烦,那能不能不要一遍一遍输入账号,直接跳过登录页面进行操作.这个时候就要用到cookie,这次主要整理cookie的一些操作,包含获取c ...

  8. .net ajax批量删除,asp.net 全部选中与取消操作,选中后的删除(ajax)实现无刷新效果...

    前台代码 : 用户信息操作 //页面的初始化 $(document).ready( function(){ loadUserInfo(); }); //加载用户信息到页面 function loadU ...

  9. 双链表——双链表的定义及其基本操作(初始化、头插法尾插法建表、插入、查找、删除、判空等)

    文章目录 双链表的定义 双链表上的操作 初始化 插入操作 建立双链表 头插法建立双链表 尾插法建立双链表 遍历操作 求双链表的长度 查找操作 按值查找 按位查找 删除操作 判空操作 完整代码及实例 总 ...

最新文章

  1. android开发学习 ------- 弹出框
  2. 【Flutter】Flutter 混合开发 ( 关联 Android 工程与 Flutter 工程 | 安卓页面中嵌入 Flutter 页面 | 安卓中启动 Flutter 页面 )
  3. CryptAPI和openssl交互使用
  4. 我会铭记这一天:2016年10月25日
  5. 1.4Hadoop伪分布式安装
  6. CCNET自动构建之路
  7. 力扣1716.计算力扣银行的钱
  8. 速成pytorch学习——9天构建模型的3种方法
  9. 数据库-SQL Server2005-第4季SQL从入门到提高-2SQL Server使用
  10. 达梦数据库修改字段长度_达梦数据库,国产数据库替代的希望之星
  11. PRAE插件开发遇到的一个坑
  12. TheFatRat生成免杀木马(powershell)报错问题
  13. php fseek函数,php fseek函数怎么用 - fseek
  14. JUCE框架教程(4)—— Slider Class入门
  15. Spring Gateway 报错java.lang.IllegalStateException: COMPLETED 解决
  16. Ajax 与异步数据传输
  17. Chromebook + Crouton
  18. 5G扬帆 -- 2022中国国际信息通信展推出数字医疗健康展区
  19. OpenCV学习——实现滑动条式调色板
  20. 百度地图根据轨迹计算路程_百度张传明:疫情下的“活”导航是如何炼成的

热门文章

  1. Blockly开发1
  2. STM32CudeMX使用步骤
  3. MySql进阶,索引,B-Tree以及索引优化
  4. Scrapy使用阿布云代理
  5. MySql中int,smallint,mediumint与bigint的区别
  6. 打印时显示预服务器,Win7打印文件时提示Active Directory域服务当前不可用
  7. 相机畸变校正、求出参数、具体应用
  8. ​能让德国人放弃现金支付​,也没谁了
  9. 机器学习之SVM(算法详细推导)
  10. 通达OA v11.9 getdata任意命令执行漏洞复现+利用