一、分类
按照逻辑结构分为
- 线性结构:各数据元素之间的逻辑以用一个
- 非线性结构:
线性结构 | 非线性结构 | |
---|---|---|
包括 | 顺序表(数组)、链式表、队列、栈 | 树、图 |
二、线性表
- 顺序表(Array):
-
用一组地址连续的存储空,依次存储线性表的数据元素
-
特点:物理地址相邻的元素,存储的位置也相同
- 链表 (Linked list):
-
用一组任意存储单元存放线性表的数据元素,并通过指针相连接结点的序列;
-
第一个元素为头结点,最后一个为尾结点。
-
结点包含
数据域 | 指针域 |
---|---|
存储信息 | 存储后继元素的地址 |
- 栈(Stack): 只能在某一端进行插入和删除的特殊线性表。
- 栈顶: 允许入栈出栈的一端;
- 栈底: 不允许入栈出栈的一端;
- 特点: 按照先进后出的原则存储数据,先进入的数据被压入栈底,最后进入的元素在栈顶,需要读取数据时从栈顶弹出数据;
- 队列(Queue): 一种特殊的线性表,它只允许在表的前端进行删除操作,在表的后端进行插入操作,队列中没有元素时,称之为空队列;
- 队首: 删除的一端(出队)
- 队尾: 插入的一端(入队)
- 特点: 先进先出
三、链表
链表有单链表、双向链表、循环单链表等;
- 单链表:链表中的结点包含一个指针域指向后继结点;
- 循环单链表:单链表的尾结点指向该链表的头结点;
- 双链表:链表中的结点都包含了两个指针域,分别指向该结点的直接前驱和直接后继。
双链的组成 | 直接前驱 | 直接后继 |
---|
四、顺序表(数组)与链表的区别:
- 存储空间的区别:
- 数组是静态分配内存空间的,所有元素是存放在一组地址连续的存储单元中,一旦分配,不可更改,数据元素在数组中的顺序号可确定它在存储单元中的位置。
- 链表动态分配内存空间,存储空间是不确定的。
- 效率:
- 数组的查询效率高,但添加元素和删除操作的效率低;
- 链表的查询效率低,但增删操作的效率高;