LinkedList 和 Array
来源:互联网 发布:html的js加减怎么做 编辑:程序博客网 时间:2024/05/17 16:53
链表是线性表的一种链式存储结构。
数组是线性表的顺序存储结构。
【线性表】
线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。
【线性表的实现】
线性表有两种存储方式,
一种是顺序存储结构,我们常用的Array数组就是一种典型的顺序存储结构。
另一种是链式存储结构。链表LinkedList就是一种典型的链式存储结构
【链表和数组的存储特点】
数组必须在内存是连续的,因为数组是同一个数据格式,内存是对齐的。
好处:查找方便。随机读取。O(1)
坏处:增删方便不方便,数组是内存固定大小申请的。不能随意拓展。涉及到内存划分和对齐的原因。浪费内存。
链式存储结构就是两个相邻的元素在内存中可能不是相邻的。但是逻辑上是相邻的。
好处:链表增删是O(1)
每一个元素都有一个指针域,指针域一般是存储着到下一个元素的指针。这种存储方式的优点是定点插入和定点删除的时间复杂度为 O(1),不会浪费太多内存。添加元素的时候才会申请内存,删除元素会释放内存。
缺点:查找是O(N)
必须遍历呀。
-------------------------------------------------------------------------
编程实现
Python
class ListNode: def __init__(self, val): #构造函数 self.val = val # 实例化的值 self.next = None #下一个结点对象 全部。只不过实际实现是通过内存地址索引再加上数据类型(即内存Bit长度)读取的
Java
public class ListNode { public int val; public ListNode next; public ListNode(int val) { this.val = val; this.next = null; }}
【理解】
由于C和C++可以操作内存。所以可以看作是Node=value + *next(指向下一个Node)
所以我们可以看作是Node之间是通过node的内存地址来连接的。
模型是内存地址绳子串接Node
但是我们在python 和 java是没有指针操作的概念。
所以应该好的理解是 Node包含全部。
模型应该是大鱼吃小鱼的串接。我包含你。你包含他。一直下去。
【碎碎念】
一般来说好多书籍课本都是写作那种C的 绳子串接Node模型。个人觉得差意思。
因为链表的本质是Node的包含:即当前Node包含下一个Node。但是在实际机器实现的似乎是根据存储Node内存首地址再根据数据类型对应的内存长度(Bit位数)读取的。也就是本质是包含整个Node才对。大鱼吃小鱼的。
但是实际实现只能存储一个首地址呀 那么再默认配合数据类型的长度 ==等价变成== 整个Node啊。 这算是具体物理实现。
但是概念上大鱼吃小鱼的全部Node包办模型更方便理解。好比俄罗斯套娃一样。
- LinkedList 和 Array
- Linkedlist和Array实现Stack
- 利用Array和LinkedList实现hashMap
- 数组(Array)和列表(ArrayList) LinkedList 有什么区别?
- Array vs LinkedList
- array of LinkedList
- Array、ArrayList、Vector、LinkedList
- Array、arraylist、linkedlist
- Array / ArrayList / Vector / LinkedList / Hashmap
- Array / ArrayList / Vector / LinkedList / Hashmap区别
- Array, ArrayList, LinkedList之间的区别分析
- ArrayList和LinkedList区别
- ArrayList、Vector和LinkedList
- LinkedList、ArrayList和Vector
- ArrayList和LinkedList区别
- ArrayList和LinkedList区别?
- ArrayList和LinkedList区别
- 使用arraylist和linkedlist
- 判断字符串中有无重复字符,不使用额外的数据结构
- linux进程管理原理
- linux操作系统学习心得
- Python中的metaclass
- Python里的String
- LinkedList 和 Array
- CPA会员充值PC加wap内置资源版源码
- 八大排序算法总结(超详细)
- 旅游(国家集训队)
- 一个银行账户5000块,两夫妻一个拿着 存折,一个拿着卡,开始取钱比赛,每次只能取一千块,要求不准出现线程安全问题。
- HDU 2048 数塔 (DP)
- HDU 2602 Bone Collector(01背包裸题)
- hdu 2546 饭卡-动态规划(基础中的基础题)
- 赌博-值得玩耍的棋牌 3