描述
链表和数组不一样,不是采用连续的内存空间存放数据,是一种逻辑结构,对于数据的查找依赖指针。
链表分为双端列表和单端列表;
二者的区别在于指针的数量,单端列表有一个指针,指向下一个内存空间。双端链表则有两个指针,一个只想前一个内存空间,一个指向下一个内存空间。那么问题来了,链表第一个元素的前指针指向那个元素呢?
操作实现的过程
访问,搜索都是O(N)复杂度,链表中元素依靠指针链接,无法像数组一样通过内存空间的计算得出位置,只能够通过遍历的方式依次访问,也就是穷举。这种数据结构,和三国演义中产生那个周瑜打黄盖谚语的背景类似。故事中的船都是通过铁链相连接,每一个只链接下一个。
增加和删除的操作都是O(1)复杂度。链表的机构只需要修改指针就可以完成增加和删除操作。执行。增加操作的时候,直接断开指针,将一端的指针直接连到增加的元素上。而删除元素则是移除元素,重新连接尾部指针。
使用环境
由此可以得出结论,链表的数据结构非常适合读多写少的场景,刚好与数组相反。
类比
除此之外,我发现数据结构和操作系统中的一些知识非常相似;
在内存管理中,段页式内存管理就不依赖连续的内存空间,通过修改页表重新定位地址,而链表的删除和增加操作是修改指针完成的,同时链表的存在也就意味着无需使用连续的内存空间,只需要建立指向对象的指针就可以了。
在文件管理中,有结构中的索引组织方式是在文件之外创建文件,比链表更加高级,但二者比起物理上的连续都附加了一层结构;