一、定义
数组:数组是有序的元素序列。数组由数组名,[ ],下标组成。
链表:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
二、类型
数组:指针数组和数组指针,字符数组和字符串数组,结构数组
链表:单链表,双向链表和循环链表(若读者对这三种链表以及二分查找法感兴趣可浏览本博主主页搜索“链表与二分查找法”)
二、数组和链表的相似之处
数组中的每个元素和另一个元素都好像是手拉着手一样,这就好像链表中的一个指针域是存储下一个结点的地址一样。
三、数组和链表的不同之处
1.从输入和输出的角度谈:数组是通过下标的变化来访问数组的值的,只要下标的值小于存储的数量就不会停止。eg:int a[100];此时如果将这个数组装满,那再将这个数组循环输出时会输出100个结果(注意:0~99而不是1~100)。
而链表是通过每个结点的两个部分来实现的:第一个是存储数据元素的数据域,第二个是存储下一个结点地址的指针域,只要第二个的指针域不是NULL,这个链表就不会停止,所以一般使用链表需要定义一个指针。例如下图:
流程图如下:
2.从插入(或者改变顺序)和删除(数组跟插入相反,而链表直接删去即可)的角度讨论哪种比较方便:对于数组而言,如果是插入,(不说插在首位和尾部)则需要为原来的数组增加长度,然后从将要插入的位置的下标元素i到n(比如原来数组长度是n)往后面移动一位(可通过赋值的形式),然后将要插入的元素放在对应下标a[i]即可。其实,读者读到这里就会发现,其实这种方法很繁琐。所以我在这里为读者介绍另外一种简便的方法——链表。链表是通过指针让他们之间彼此连接起来的,因此,我们可以通过上一个结点A的next,让指针p指向我们要插入数值的结点D存储数据的指针域,再从它的next让指针p指向B存储数据的指针域即可。如下图:
用链表对大量数据的插入,修改某个数据的位置,删除,比用数组方便许多!!!
欢迎各位读者在评论区指出在下不足之处,谢谢各位!!!