数组和链表-《算法图解》学习
内存工作原理
需要将数据存储到内存时,你请求计算机提供存储空间,计算机给你一个存储地址。需要存
储多项数据时,有两种基本方式——数组和链表。但它们并非都适用于所有的情形,因此知道它
们的差别很重要。接下来介绍数组和链表以及它们的优缺点。
==============to be conntinued================
1、什么是链表Java LinkedList
标准答案:链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,有一系列结点(地址)组成,结点可动态的生成。
个人理解:链表是离散的表,n个节点组成,每个节点有2部分:1个是本节点存储的数据,1个是下一个节点的地址(指向下一个节点的指针)。操作系统上为了提高内存管理的效率,存储数据时有离散算法,那么链表应该也是为了提高数据的存储效率的一种数据类型。
与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。
以下情况使用 ArrayList :
- 频繁访问列表中的某一个元素。
- 只需要在列表末尾进行添加和删除元素操作。
以下情况使用 LinkedList :
- 你需要通过循环迭代来访问列表中的某些元素。
- 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。// 引入 LinkedList 类
1 2 3 4 5 6 7 8 9 10 11 12 13 | <em id= "__mceDel" > import java.util.LinkedList; public class RunoobTest { public static void main(String[] args) { LinkedList<String> sites = new LinkedList<String>(); sites.add( "Google" ); sites.add( "Runoob" ); sites.add( "Taobao" ); sites.add( "Weibo" );<br> // 使用 addLast() 在尾部添加元素<br> sites.addLast("Wiki");<br>// 使用 removeFirst() 移除头部元素<br> sites.removeFirst();<br>// 使用 removeLast() 移除尾部元素<br> sites.removeLast();<br>// 使用 getFirst() 获取头部元素<br> System.out.println(sites.getFirst());<br>// 使用 getLast() 获取尾部元素<br> System.out.println(sites.getLast());<br>//可以使用 for 配合 size() 方法来迭代列表中的元素:<br>for (int size = sites.size(), i = 0; i < size; i++) {<br> System.out.println(sites.get(i)); System.out.println(sites); } } </em> |
2、链表C语言
2.1创建链表节点create_node
2.2插入节点
2.3遍历链表
1 2 3 4 5 6 7 8 9 10 11 12 | void show(struct node *p) { while ( 1 ) { if (p== NULL) //假设p已经为NULL则返回 { return ; } printf( "p=%d\n" ,p->data); p = p->next; //链表的重要知识点!!! 遍历节点向下走 } } |
3、链表算法题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通