C语言-Day08
“C语言部分-Day08”
一、数据结构
常用数据结构分为链表、栈、队列、哈希表、红黑树等
1.1 链表
1.1.1 单链表的基本操作
初始化链表:
- 创建链表:create_list
增加节点:
- 头插法:add_before_head
- 尾插法:add_behind_tail
- 根据索引插入:add_node
删除节点:
- 根据索引删除:remove_node
- 销毁链表:destroy_list
查询节点:
- 根据数值查询:indexOf
实现单链表的基本操作
头文件:linklist.h
实现:linklist.c
测试:
1.1.3 双向和单向链表的对比
时间复杂度对比
对比项 | 单向链表 | 双向链表 | 备注 |
---|---|---|---|
增加结点(在某个结点前面添加) | O(n) | O(1) | |
删除结点( | O(n) | O(1) | |
查找:前驱结点 | O(n) | O(1) | |
查找:根据index | O(n) | O(n) | 单向链表只能单向遍历,双向链表可以逆向,双向更快 |
查找:根据value(大小有序) | O(n) | O(n) | |
查找:根据value(大小无序) | O(n) | O(n) |
1.2 链表作业
1.2.1 求单链表的中间元素
需求:
实现
1.2.2 判断单链表是否有环
何为有环?
思路:
- 使用双指针
实现:
1.2.3 反转单链表
需求:
思路:
- 头插法
- 双指针(prev, curr)
实现:
测试:
C语言-Day08
http://gsproj.github.io/2024/03/20/04_C++/01_C语言/day08/