顺序表虽然是一种很有用的存储结构,但是也具有以下局限性:
1.若要为顺序表扩充存储空间,则需要重新创建一个地址连续的更大的存储空间,并把原有的数据元素都复制到新的存储空间中。
2.因为顺序存储要求逻辑上相邻的数据元素,在物理存储位置上也相邻,这就意味着增加删除元素会引起平均约一半的数据元素移动。
所以顺序表适合“静态”线性表,即一旦形成就很少进行插入删除操作。对于需要频繁执行插入和删除操作的“动态”线性表,通常采用链式存储结构。
因为链式存储结构不要求逻辑上相邻的数据元素在物理上也相邻,是用一组地址任意的存储单元来存放数据元素的值。所以,它只能按顺序存取。
链式存储结构的概念之前已经说过了,这里就不详细说了。
对于链表我个人的理解是这样的,每个链表都会有一个头指针(head)。如果单链表有头结点的话,那么这个头指针是指向这个头结点的,
如果是没有头结点,那么这个头指针是指向链表中的首结点的。
什么是头结点呢,头结点就是无论是不是空链表,永远在链表物理地址上的第一位。设置一个头结点,里面并不存放值,只是为了简化删除,插入操作。
单链表的总体思想:从一个空表开始,一次将新结点插入到当前形成的单链表中。根据插入位置的不同,分为头插法和尾插法。
头插法:每次将创建的新结点插入到当前形成的单链表的表头。
栈是一种特殊的线性表,栈中的数据元素以及数据元素之间的逻辑关系和线性表相同,俩者的差别在于:线性表的插入和删除操作可以在任意位置进行,而栈的插入和删除操作只允许在表的尾端进行。
通常把插入操作叫做入栈,删除操作叫做出栈。栈是一种先进后出的线性表。生活中有许多具有栈特性的应用实例,比如,一叠盘子。去盘子和添加盘子的操作满足先进后出的原则。