顺序存储结构
-
线性表:由零个(空表)或多个数据元素组成的有限序列
-
数据类型:一组性质相同的值的集合及定义在此集合上的一些操作的总称。
-
抽象数据类型:数据类型+相关操作(ADT)
-
#define MAXSIZE 20 typedef int ElemType; typedef struct { ElemType data[MAXSIZE]; int length;//线性表当前长度 }SqList;
-
elemtype:一种结构中元素的类型不一定是整型、字符型、浮点型或者用户自定义类型,为了不重复说明,使用过程用 “elemtype” 代表所有可能的数据类型,简单明了的概括整体。在算法中,除特别说明外,规定ElemType的默认是int型。你想让它是什么类型自己用typedef重定义就行。
-
数组的长度是存放线性表的存储空间的总长度。初始化后不变。线性表的长度是表中元素的个数,会发生改变。
-
线性表的顺序存储结构在存、读数据时不管在哪个位置,时间复杂度都是O(1),而插入、删除的时间复杂度都是O(n)。
-
优点(适合多次存储数据)缺点(插入和删除需要移动大量元素)
链式存储结构
-
结点:
-
存储数据元素信息的域:数据域
-
存储后继元素的域:指针域(存储的信息称为指针或链)
(每个结点中只包含一个指针域:单链表)
-
-
单链表查找元素平均复杂度:O(n)(核心思想:工作指针后移)(一般不方便用for循环来遍历)
-
优点:便于多次插入或删除的操作
头指针
-
指向第一个结点的指针(如果链表有头结点,则指向头结点)
-
无论链表是否为空,头指针不为空。
-
头指针是链表的必要元素。
头结点
-
放在第一个元素的结点之前,其数据域一般无意义(可存放长度)
-
头结点不是链表的必要元素。