1 线性表
1.线性表(list):零个或多个数据元素的有限序列
数组和链表的区别:
(1)存储方式不同
数组是连续存储,数组在创建时需要一个整块的空间。
链表是链式存储,链表在内存空间中不一定是连续的。
数组一般创建在栈区,链表一般创建在堆区,在增加节点时需要new或malloc新节点,相较于数组长度不固定,自由度高。
(2)访问元素方式不同
数组可以通过下标随机访问,单向链表只能通过头结点从前向后访问链表中的元素。
(3)增删效率不同
数组在插入或删除的时候需要移动链表中的其他元素,时间复杂的为O(n)。
链表在进行插入删除时,找到要插入或删除的位置后,增删时间复杂度为O(1)。
所以当进行大量的插入和删除操作时建议使用链表,若主要进行查找操作,较少进行插入操作是建议使用数组。
2.线性表的顺序存储结构
优点:(1)无须为表示表中元素之间的逻辑关系而增加额外存储空间;(2)可快速存取表中任一位置元素
缺点:(1)插入和删除需要移动大量元素;(2)当线性表长度变化较大时,难以确定存储空间的容量;(3)造成存储空间的碎片
3.数组(Array):是有序的元素序列
数组长度 是存放线性表存储空间的长度,分配后一般不变。
线性表长度 是线性表中数据元素的个数,随着线性表插入和删除的进行,量是变化的。
java定义数组:
int[] arr = new int[]{1, 2, 3}; int[] arr = {1, 2, 3}; int[] arr = new int[3];//数组长度
二维:int[][] arr=new int[3][3]
4.线性表的链式存储结构
所有元素都不考虑相邻位置,哪里有空位就到哪里,只是让每个元素的位置知道它下一个元素的位置在哪里。
头指针是链表的必要元素,头结点不一定是链表的必需元素。
java链表基本操作
//定义节点类 public class ListNode { int val;//数据域 ListNode() {}//构造方法 ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) { this.val = val; this.next = next; } } //创建一个新节点 ListNode list=new ListNode(0) //初始化一个节点值为0的空节点 //遍历 public void displayAllNodes(ListNode list) { ListNode current = list; while (current != null) { System.out.println(current.val); current = current. next;
}
} //头插入 public void add(ListNode list,int a) { ListNode aNode = new ListNode(a); ListNode current = list; //在头节点插入 aNode.next=current.next; current.next=aNode; } //删除 public void add(ListNode list) { ListNode current = list; //删除头结点 current = current.next;
}
参考链接:
https://blog.csdn.net/m0_52261367/article/details/123614704
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY