双链表初始化、头插、尾插、头删、尾删、任意位置插入和删除、判空、销毁、打印、查找操作
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 单链表插入 2 单链表删除 3 代码实现 1 单链表插入 要想将结点s插入到ai与ai+1之间,不需要移动数据元素,只需要在ai与ai+1之间插入 ...
- c语言pushback用法,C语言:【动态顺序表】动态顺序表的初始化、打印、尾插PushBack、尾删PopBack...
#include #include #include #include #include typedef int DateType; typedef struct SeqList { DateType ...
- 数据结构 - 双链表的头插法和后插法
1.单链表的局限性 -> 单链表是对数组的一个扩展,解决了数组的大小比较死板不容易扩展的问题.使用堆内存来存储数据,将数据分散到各个节点之间,其各个节点在内存中可以不相连,节点之间通过指针进行单 ...
- 链表的三种插入方法(头插法,尾插法,任意位置插入)
插入作为链表的四大基本操作之一(增删改查),通常都会借助插入的方法增添信息,这一部分为大家着重讲解插入法. 1.头插法 简而言之,就是从链表的头部进行一个插入,定义一个结构体指针的新节点,并且为这个新 ...
- 建立循环双链表(头插法)
该方法从一个空表开始,读取数组a中元素,生成新节点,将读取的数据存在该节点的数据域中,然后将该新节点插入到当前节点的表头上,直到结束为止. 双链表的存储结构: typedef strcut DLink ...
- 建立双链表(头插法)
双链表存储结构: 要建立双链表,首先要明白双链表的存储结构定义: typedef struct DLinkList{ //存储结构定义int data;DLinkList * prior;DLinkL ...
- 算法与数据结构【30天】集训营——线性表之易混淆知识点双链表的结点前插和后插(05)
目录 双链表的插入 P结点后插入新的结点S(后插案例) P结点前插入新的结点q(前插案例) 每文一语 双链表的插入 在双链表的插入操作,我们比较头疼的就是,明明选项看着答案都是比较的完整,但是为啥就是 ...
- c语言数组指定位置插入和删除_玩转C语言链表,单链表/双向链表的建立/遍历/插入/删除...
最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合, ...
- (C语言版)链表(二)——实现单向循环链表创建、插入、删除、释放内存等简单操作
http://blog.csdn.net/fisherwan/article/details/19754585 昨天写了单向链表的代码,今天上午把单向循环链表的程序给敲完了.链表的相关操作一样的,包含 ...
最新文章
- 在3ds Max中使用V-Ray 5渲染引擎视频教程
- Qt导入CMakeLists.txt后无法调试
- 高压模块性相关的几个问题测量
- 电路原理邱关源_看高手是如何学习电路原理的,有哪些捷径?
- 浅谈最优化问题的KKT条件
- pyflink shell的remote模式下的实验记录
- SEGW activation check bypass via debugging
- 根据日期累计求和_excel条件求和技巧:应用SUMIF函数计算客户余款
- 使用Spring AOP进行面向方面的编程
- Peacock:大规模主题模型及其在腾讯业务中的应用-2015
- dup java_java web----TCP/DUP 通信
- Apache Pulsar 中文社区先锋奖与年度优秀案例出炉!
- 获取中国气象台卫星云图
- 电子产品可靠性检测哪些项目
- Unity手机游戏广告接入的大致思路(Android和iOS)
- python统计个数的函数_NumPy常用的统计函数
- vue父组给子子组件传html,vue组件之间互相传值:父传子,子传父
- 电脑连不上ishanghai_ishanghai电脑版下载-ishanghai电脑客户端v5.2.3 最新版 - 极光下载站...
- echarts中改变饼图的颜色
- 网络资源计算机教学设计,第11课 网络资源任我搜 教案
热门文章
- RabbitMQ ——基于Stomp实现与MQTT客户端通信
- poi导出带有下拉选项的Excel,解决下拉选项过多报错的问题
- 野火iMX6ULL Pro开发板移植SDL2
- Python爬虫入门到实战
- cisco理论---以太通道端口会聚协议(PAgP)与LACP的区别
- 分布式微服务项目实现高并发高可用高性能可以使用到的方案
- SQL server用户Sa登录失败的解决方法
- Flutter进阶篇(4)-- Flutter的Future异步详解一、认识Future二、创建多个Future的执行步骤三、then函数嵌套使用的执行步骤四、综合示例五、我们来看看Future的源码
- 算法题:10级台阶,一次一步或两步,打印所有的走法
- 安卓android+WebSocket实现简易QQ聊天室