首先明白一个概念,抽象数据类型(abstract data type,ADT)是一些操作的集合,抽象数据类型是数学的抽象,是对一种数据结构的描述。
表ADT
表的理解很简单,可以理解为按照顺序放的数字,比如A1,A2,A3.。。。。Ax,这个表的长度就是X,如果长度为0,则是空表。
而表的实现,又分为以下两种:
表的简单数组实现*
顾名思义,表的所有操作都是通过数组来实现。虽然数据是动态指定的,但是需要对表的大小的最大值进行估计,通常要估的大一些(可以理解为你定义一个数组,但是不知道具体有多少个元素,但是大概知道有六七个,所以定义的时候会定义大一点稳妥起见),但是这样就会浪费空间,是非常大的局限性。而进行数据的插入删除操作,一般是怎么做的呢?数组中——首先会告诉你在哪里插入,然后那个位置后边的元素一个一个往后移,如果插入的位置是第一个呢?那就是所有的元素都要往后移,复杂度为O(n)。
总是是非常麻烦的,所以一般不用数组来实现表的这种结构。
链表
个人思考,一个技术的出现肯定会有它的原因而且一定是为了优化之前的缺点才出现的。所以链表,为了避免插入和删除的线性开销,允许表不连续存储。
一般用指针,指针结构包括数据元素,和一个指向下一个元素的Next指针(一个大佬带一个指路的弟弟,弟弟指哪里大佬去哪里,一个指一个就这么指下去啦)。
因此,链表有一个特点,就是结构不一定在内存中相连,这样删除或者加入只要改一下Next指针指向的的位置,完成删除或者加入操作。
删除操作
加入操作