数组和链表——-简单学习
前几天本身已经写好的东西,怪自己太笨,把数据库删除了。故选择重新做这个关于数组和链表的文章,希望帮到大家。
看了《算法图解》这本书把我直接遗留下来好久的病给去了,而且还巩固了基础,所以想出一片文章让大家都理解。首先大家看下面的图片,里面包含了数组和 链表的简单顺序:
链表:链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起。
数组:在内存中,数组是一块连续的区域。
数组和链表的优点总结以及基础知识
《数组》
(1)下面在描述数组前先给大家讲一个术语:
索引:元素的位置称为索引。这样说可能有些初学者朋友还是看不懂。
下面给大家举个例子:
比如这个元素阿傻位于索引1处。很多朋友叫下标,但是为了专业一点可以说是索引。为了防止大家钻牛角尖,使用哪种读法都可以。
(2)数组在内存中是连续的。
(3)今天看到数组的表示可以用指针表示,比如 int a[10]可以写成int (*a)[10];并且二维数组如int b[3][4];可以写成 int ((b+3)+4);虽然简简单单 但是可以看出数组和指针有着密不可分的关系。这些是都是在c语言中其他计算机语言就不知道了。
(4)关于数组它支持随机访问,所以在读数据方面它更胜一筹。
(5)数组支持随机访问和顺序访问两种访问方式。
《链表》
(1)链表的存储顺序在内存中可以是不连续的。
(2)链表只支持顺序访问。(访问比较麻烦)
(3)链表在输出的插入删除方面有较多的优点。(速度快)
(4)链表在后面的散列表(一种数据结构)会用到。
数组和链表的插入删除详解
《数组》
数组在插入和删除方面有很大的缺点,
(1)随机插入的话 (假设在元素1和元素2之间插入)这就必须把元素2向后移才能插入。假设后面的数据很多的话就不便于我们插入了。(简便的话就在数组后面插入但是要考虑数组长度)
(2)删除的话(假设删除元素1)这就把元素0后面的元素全部向前移动。假设后面数据很多就很麻烦了。
(3)插入时必须考虑内存大小是否够。否则会操作失败。
《链表》
(1)链表虽然很优秀但是在数据访问的时候比较麻烦,因为自身是只支持顺序访问。所以这种访问方式很麻烦,比如我们要知道元素(3.阿坏)的位置,我们必须知道元素(1.阿呆)的位置然后问阿呆 元素(2.阿傻)的位置,其次继续问阿傻 元素(3.阿坏)的位置。总结起来就是要知道某个元素 必须从头开始去访问,这就造成了时间的浪费。
(1-<2-❤️)访问方式
(2)插入时必须考虑内存大小是否够。否则会操作失败。
(3)链表在插入删除的时候只需要修改前一个元素的指向地址就行了。(简单的说插入元素(4.阿衰)只需要告诉阿呆下一个找阿衰就可以啦。)