顺序存储结构的评价:
优点:
① 是一种 随机存取 结构,存取任何元素的时间是一个常数,速度快;
② 结构简单,逻辑上相邻的元素在物理上也是相邻的;
③ 不需要使用指针,节省存储空间。
缺点:
① 插入和删除元素要移动大量元素,消耗大量时间;
② 需要一块连续的存储空间;
③ 插入元素可能发生“溢出”;
④ 自由区中的存储空间不能被其他数据占用(共享),存在浪费空间的问题。
内存:网格中,2k,5k,3k 指的是自由区中未被使用的存储空间。
2k | 占用 | 5k | 占用 | 3k |
单链表:单链表指的是线性表的每个节点分散地存储在内存空间中,先后依次用一个指针串联起来。
data:数据域,用于存放元素
next:指针域,用于存放下一个结点地址的部分
单链表分为:不带表头结点 和 带表头结点。
不带表头结点的单链表:单链表的头指针指向第一个首元结点。
head == NULL 时,为空表,否则为非空表。.
当它是非空表时,在首节点 *head 中会存放数据。
带头结点的只须 head 就可以访问第一个元素。
带表头结点 的单链表:
有表头结点 单链表的头指针指向头结点。
head 指向表头节点,
head -> data 不放元素
head -> next 指向首节点 a1
当 head -> next == NULL,为空表,否则为非空表。
以上几句话结合截图来看会更清晰明了。
单链表的结点结构:
① struct:这是结构体关键字,通过存放一组不同类型的数据,来定义一个结构。其定义形式为:
struct 结构体名称 {
结构体所包含的变量或数组
};
结构体是一种集合,里边包含了多个变量或数组,它们类型可以相同,也可以不同,每个这样的变量或数组
都称为结构体的成员(Member)。例如我们定义一个 student 结构体:
注意!!!!大括号后边的分号 ";" 不能少,这是一条完整的语句。
struct stu{
char *name;// 姓名
int num; // 学号
int age; // 年龄
};
思考题:单链表中的结点有两个域吗?
存储每个结点需要有两个域,一个是数据域,另一个是指针域