活动地址:CSDN21天学习挑战赛
n个相同数据类型的数据元素组成的有限序列称为线性表
。
表头元素
,最后一个数据元素称为表尾元素
直接前驱
直接后继
由定义与基本逻辑特性可以推到出线性表的以下特点:
一个数据结构的基本操作是指其最核心、最基础的操作。其他较复杂操作都可以通过基本操作实现。
序号 | 基本操作 | 描述 |
---|---|---|
1 | InitList(&L) | 初始化表。构造一个空线性表L。 |
2 | Length(L) | 求表长。返回线性表L的长度,即表中元素的个数。 |
3 | LocateElem(L, e) | 按值查找。获取表L中给定值e的元素位置。 |
4 | GetElem(L, i) | 按索引查找。获取表L中给定位置i的元素的值。 |
5 | Insert(&L, i, e) | 插入元素。在表L中给定位置i处插入元素e。 |
6 | Delete(&L, i, &e) | 删除元素。删除表L中给定位置i处的元素,并返回其值e。 |
7 | PrintList(L) | 打印表。按先后顺序打印表L的所有元素。 |
8 | Empty(L) | 判空。判断表L是否为空。 |
9 | DestoryList(&L) | 销毁表。销毁线性表L,并释放其所占用的内存空间。 |
线性表是一种逻辑结构,实现这种逻辑结构时,根据不同的存储方式,线性表可分为顺序表
和链表
。
顺序存储结构使用一组地址连续的内存来存储表中的数据元素。
以顺序存储结构实现的线性表称为顺序表
。
链式存储不需要使用地址连续的内存来存储数据,它使用指针来连接每个节点。
以链式存储结构实现的线性表称为链表
。
根据元素间指针及链表结构的不同,链表又分为单链表
、双链表
和循环链表
。
单链表通过任意的存储单元存储线性表中的数据元素,每个节点由数据域
和指针域
两部分组成,如下图,其中data为数据域,存放数据元素,next为指针域,存放其直接后继节点的地址。
首元节点:链表存储第一个数据元素的节点。
头节点:数据域为空,或存放链表大小,指针域存储首元节点的地址,对于一个链表,头节点不是必须的。
头指针:指向链表的第一个节点,有头节点指向头节点,没有头节点则指向首元节点。
带头结点的单链表如下:
不带头结点的单链表如下:
双链表与单链表类似,不同的是双链表有两个指针域,prior存放其直接前驱节点的地址,next存放其直接后继节点的地址。
双链表示意图如下:
把单链表尾节点的指针指向头节点或首元节点,就形成了单循环链表。
把双链表尾节点的指针指向头节点或首元节点,就形成了双循环链表。
虽然循环链表成环状,但仍属于链表,所以仍可找到头指针、头节点、首元节点等。
单循环链表示意图如下:
双循环链表示意图如下: