ListNode* buyDListNode(LTDataType data)
{ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));if (NULL == newNode){assert(0);return NULL;}newNode->data = data;newNode->prev = NULL;newNode->next = NULL;return newNode;
}// 创建返回链表的头结点.
ListNode* ListCreate()
{ListNode* head = buyDListNode(0);head->next = head;head->prev = head;return head;
}// 双向链表销毁
void ListDestory(ListNode** plist)
{assert(plist);// 1. 采用头删的方式,将链表中所有的有效节点删除完ListNode* cur = (*plist)->next;while (cur != *plist){(*plist)->next = cur->next;free(cur);cur = (*plist)->next;}// 2.删除头结点free(*plist);*plist = NULL;
}// 双向链表打印
void ListPrint(ListNode* plist)
{assert(plist);ListNode* cur = plist->next;while (cur != plist){printf("%d ", cur->data);cur = cur->next;}printf("\n");
}// 双向链表尾插
void ListPushBack(ListNode* plist, LTDataType x)
{ListNode* newNode = buyDListNode(x);// 先不断开原链表,然后新节点连接到链表中newNode->prev = plist->prev;newNode->next = plist;newNode->prev->next = newNode;plist->prev = newNode;
}int ListEmpty(ListNode* plist)
{assert(plist);return plist->next == plist;
}// 双向链表尾删
void ListPopBack(ListNode* plist)
{ListNode* delNode = NULL;assert(plist);if (ListEmpty(plist))return;// 删除最后一个节点delNode = plist->prev;delNode->prev->next = plist;plist->prev = delNode->prev;free(delNode);
}// 双向链表头插
void ListPushFront(ListNode* plist, LTDataType x)
{// 1. 申请一个新节点ListNode* newNode = buyDListNode(x);// 2. 分分情况来进行插入// 在不断开链表的情况下,先将新节点连接进来newNode->next = plist->next;newNode->prev = plist;plist->next = newNode;newNode->next->prev = newNode;
}// 双向链表头删
void ListPopFront(ListNode* plist)
{ListNode* delNode = NULL;if (ListEmpty(plist))return;delNode = plist->next;// pist    0     1   2   3   4    5//      delNodedelNode->next->prev = plist;plist->next = delNode->next;free(delNode);
}// 双向链表查找
ListNode* ListFind(ListNode* plist, LTDataType x)
{assert(plist);ListNode* cur = plist->next;while (cur != plist){if (cur->data == x)return cur;cur = cur->next;}return NULL;
}// 双向链表在pos的前面进行插入
void ListInsert(ListNode* pos, LTDataType x)
{assert(pos);ListNode* newNode = buyDListNode(x);newNode->prev = pos->prev;newNode->next = pos;newNode->prev->next = newNode;pos->prev = newNode;
}// 双向链表删除pos位置的节点
void ListErase(ListNode* pos)
{if (NULL == pos)return;pos->prev->next = pos->next;pos->next->prev = pos->prev;free(pos);
}

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

  1. 单链表的按位置插入和删除

    单链表的插入和删除 文章目录 单链表的插入和删除 1 单链表插入 2 单链表删除 3 代码实现 1 单链表插入 要想将结点s插入到ai与ai+1之间,不需要移动数据元素,只需要在ai与ai+1之间插入 ...

  2. c语言pushback用法,C语言:【动态顺序表】动态顺序表的初始化、打印、尾插PushBack、尾删PopBack...

    #include #include #include #include #include typedef int DateType; typedef struct SeqList { DateType ...

  3. 数据结构 - 双链表的头插法和后插法

    1.单链表的局限性 -> 单链表是对数组的一个扩展,解决了数组的大小比较死板不容易扩展的问题.使用堆内存来存储数据,将数据分散到各个节点之间,其各个节点在内存中可以不相连,节点之间通过指针进行单 ...

  4. 链表的三种插入方法(头插法,尾插法,任意位置插入)

    插入作为链表的四大基本操作之一(增删改查),通常都会借助插入的方法增添信息,这一部分为大家着重讲解插入法. 1.头插法 简而言之,就是从链表的头部进行一个插入,定义一个结构体指针的新节点,并且为这个新 ...

  5. 建立循环双链表(头插法)

    该方法从一个空表开始,读取数组a中元素,生成新节点,将读取的数据存在该节点的数据域中,然后将该新节点插入到当前节点的表头上,直到结束为止. 双链表的存储结构: typedef strcut DLink ...

  6. 建立双链表(头插法)

    双链表存储结构: 要建立双链表,首先要明白双链表的存储结构定义: typedef struct DLinkList{ //存储结构定义int data;DLinkList * prior;DLinkL ...

  7. 算法与数据结构【30天】集训营——线性表之易混淆知识点双链表的结点前插和后插(05)

    目录 双链表的插入 P结点后插入新的结点S(后插案例) P结点前插入新的结点q(前插案例) 每文一语 双链表的插入 在双链表的插入操作,我们比较头疼的就是,明明选项看着答案都是比较的完整,但是为啥就是 ...

  8. c语言数组指定位置插入和删除_玩转C语言链表,单链表/双向链表的建立/遍历/插入/删除...

    最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合, ...

  9. (C语言版)链表(二)——实现单向循环链表创建、插入、删除、释放内存等简单操作

    http://blog.csdn.net/fisherwan/article/details/19754585 昨天写了单向链表的代码,今天上午把单向循环链表的程序给敲完了.链表的相关操作一样的,包含 ...

最新文章

  1. 在3ds Max中使用V-Ray 5渲染引擎视频教程
  2. Qt导入CMakeLists.txt后无法调试
  3. 高压模块性相关的几个问题测量
  4. 电路原理邱关源_看高手是如何学习电路原理的,有哪些捷径?
  5. 浅谈最优化问题的KKT条件
  6. pyflink shell的remote模式下的实验记录
  7. SEGW activation check bypass via debugging
  8. 根据日期累计求和_excel条件求和技巧:应用SUMIF函数计算客户余款
  9. 使用Spring AOP进行面向方面的编程
  10. Peacock:大规模主题模型及其在腾讯业务中的应用-2015
  11. dup java_java web----TCP/DUP 通信
  12. Apache Pulsar 中文社区先锋奖与年度优秀案例出炉!
  13. 获取中国气象台卫星云图
  14. 电子产品可靠性检测哪些项目
  15. Unity手机游戏广告接入的大致思路(Android和iOS)
  16. python统计个数的函数_NumPy常用的统计函数
  17. vue父组给子子组件传html,vue组件之间互相传值:父传子,子传父
  18. 电脑连不上ishanghai_ishanghai电脑版下载-ishanghai电脑客户端v5.2.3 最新版 - 极光下载站...
  19. echarts中改变饼图的颜色
  20. 网络资源计算机教学设计,第11课 网络资源任我搜 教案

热门文章

  1. RabbitMQ ——基于Stomp实现与MQTT客户端通信
  2. poi导出带有下拉选项的Excel,解决下拉选项过多报错的问题
  3. 野火iMX6ULL Pro开发板移植SDL2
  4. Python爬虫入门到实战
  5. cisco理论---以太通道端口会聚协议(PAgP)与LACP的区别
  6. 分布式微服务项目实现高并发高可用高性能可以使用到的方案
  7. SQL server用户Sa登录失败的解决方法
  8. Flutter进阶篇(4)-- Flutter的Future异步详解一、认识Future二、创建多个Future的执行步骤三、then函数嵌套使用的执行步骤四、综合示例五、我们来看看Future的源码
  9. 算法题:10级台阶,一次一步或两步,打印所有的走法
  10. 安卓android+WebSocket实现简易QQ聊天室