《2020王道》| 数据结构 | 学习笔记 | 第二章 | 线性表

本文详细介绍了线性表的概念,包括线性表的定义、基本操作,以及顺序表和链式表示的特性。在顺序表部分,讨论了插入、删除和查找操作的时间复杂度。链式表示部分涵盖了单链表、双链表、循环链表和静态链表,强调了它们各自的优点和适用场景。
摘要由CSDN通过智能技术生成

线性表


线性表的定义和基本操作

线性表的定义

线性表是具有相同数据类型的 n ( n ≥ 0 ) n(n \ge 0) n(n0)个数据元素的有限序列,其中 n n n为表长,当 n n n为表长,当
n = 0 n=0 n=0时,该线性表为空表。

线性表的一般表示为 L = ( a 1 , a 2 , . . . , a i , a i + 1 , . . . , a n ) L=(a_{1},a_{2},...,a_{i},a_{i+1},...,a_{n}) L=a1,a2,...,ai,ai+1,...,an)。式中, a 1 a_{1} a1是唯一的“第一个”数元素,又称表头元素; a n a_{n} an是唯一的“最后一个”元素,又称表尾元素。

除第一个元素外,每个元素有且仅有一个直接前驱。除最后一个元素外,每个元素有且仅有一个直接后续。
线性表的特点:

  • 表中元素的个数是有限的;
  • 表中元素具有逻辑上的顺序性,在序列中个元素排序有其先后次序;
  • 表中元素都是数据元素,每个元素都是单个元素;
  • 表中元素的数据类型相同,每个元素占用相同大小的存储空间;
  • 表中元素具有抽象性。

线性表的基本操作

  • InitList(&L): 初始化表(构造一个空表)
  • Length(L): 求表长(返回表 L L L的长度,即表中的数据元素个数)
  • LocateElem(L, e): 按值查找(在表 L L L中查找具有给定关键字值的元素)
  • GetElem(L, i): 桉位查找(获取表 L L L中第 i i i个位置上的元素值)
  • ListInsert(&L, i, e): 插入操作(在表 L L L中的第 i i i个位置上插入指定元素 e e e
  • ListDelete(&L, i, &e): 删除操作(删除表 L L L中第 i i i个位置上的元素,并用 e e e返回元素的值)
  • PrintList(L): 输出操作(按前后顺序输出线性表 L L L的所有元素值)
  • Empty(L): 判空操作(若 L L L为空表,返回 t r u e true true,否则返回 f a l s e false false
  • DestroyList(&L): 销毁操作(清空线性表,并释放线性表 L L L所占用的内存空间)

线性表的顺序定义

顺序表的定义

线性表的顺序存储又称为顺序表,是用一组地址连续的存储单元依次存储线性表中的数据元素,从而使逻辑上相邻的两个元素在物理位置上也相邻。

数组下标 顺序表 内存地址
0 a 1 a_{1} a1 LOC{A}
1 a 2 a_{2} a2 LOC{A}+sizeof(ElemType
i-1 a i a_{i} ai LOC{A}+(i-1) ∗ * sizeof(ElemType}
n-1 a n − 1 a_{n-1} an1 LOC{A}+(n-1) ∗ * sizeof(ElemType} 就、吗,吗,

线性表的顺序存储类型描述为

//静态分配
#define MaxSize 50		//定义线性表的最大长度
typedef struct{
	ElemType data{MaxSize};	//顺序表的元素
	int Length;		//顺序表的当前长度
}SqList;			//顺序表的类型定义

//动态分配
#define InitSize 100		//表长度的初始定义
typedef struct{
	ElemType *data;		//指示动态分配数组的指针
	int MaxSize, Length;	//数组的最大容量和当前个数
}SeqList;			//动态分配数组顺序表的类型定义
//初始动态分配语句
L.data = (ElemType*)malloc(sizeof(ElemType)*Initsize);

顺序表的主要特点是随机访问,即通过首地址和元素序号就可在时间 O ( 1 ) O(1) O(1)内找到指定的元素。顺序表的存储密度高,每个结点只存储数据元素。顺序表逻辑上相邻的元素物理上也相邻。

顺序表上的基本操作实现

插入操作

在顺序表 L L L的第 i i i个位置插入新元素 e e e ( 1 ≤ i ≤ L , . L e n g t h + 1 ) (1 \le i \le L,.Length+1) (1iL,.Length+1) 。若 i i i的输入不合法,则返回 f a l s e false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值