★什么是顺序表?
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组连续地址的存储单元依次存储数据元素的线性结构。表中的任一元素的地址都可以通过这个公式得到:LOC(di)=LOC(d1)+(i-1)*L 1≤i≤n 其中,L是元素占用存储单元的长度。
★
什么是链表?
链表是一种链式存储的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。它的数据是以结点(类型一般为结构体)来表示的,每个结点的构成:数据域(类型为要存储的数据的类型) + 指针域(结构体指针),数据就是链表里具体要存储的东西,指针就是用来把每个节点都连接起来,使它们形成一个链状。链表可以分成单链表、循环单链表、双向链表和静态链表。
★顺序表和链表分别有哪些优点和缺点呢?
①顺序表
优点:
(1)空间利用率高,数据是连续存放,命中率比较高
(2)存取速度高效,通过下标来直接访问。
缺点:
(2)存取速度高效,通过下标来直接访问。
缺点:
(1)插入和删除比较慢,在插入或者删除一个元素的时候,需要遍历整个顺序表移动前后的数据
(2)需要预先分配足够大的空间,估计的过大,会导致顺序表后的大量空间被闲置;但是估计的过小,又会造成溢出。
时间复杂度 :查找操作为O(1) ,插入和删除操作为O(n)。
(2)需要预先分配足够大的空间,估计的过大,会导致顺序表后的大量空间被闲置;但是估计的过小,又会造成溢出。
时间复杂度 :查找操作为O(1) ,插入和删除操作为O(n)。
②链表
优点:
(1)插入和删除速度快,保留原有的物理顺序,在插入或者删除一个元素的时候,只需要改变指针指向即可。
(2)没有空间限制,存储元素无上限,只与内存空间大小有关.
(2)没有空间限制,存储元素无上限,只与内存空间大小有关.
(3)动态分配内存空间,不用事先开辟内存
(4)是内存的利用率变高
缺点:
(1)占用额外的空间以存储指针,比较浪费空间,不连续存储,malloc函数开辟空间碎片比较多)
(2)查找速度比较慢,因为在查找时,需要循环链表。
时间复杂度 :查找操作为O(n) ,插入和删除操作为O(1)。
(2)查找速度比较慢,因为在查找时,需要循环链表。
时间复杂度 :查找操作为O(n) ,插入和删除操作为O(1)。