学习严蔚敏数据结构: 第三集

本文介绍了线性表的基本概念及特点,详细列举了线性表的基本操作,并通过实例展示了如何利用这些操作来解决问题,最后给出了顺序表的C语言实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天是线性表:

 

第二章 线性表

线性结构是一个数据结构的有序值(有序指 次序上的有序)

线性结构的基本特征:
1. 集合中必存在唯一的一个"第一元素"
2. 集合中必存在唯一的一个"最后元素"
3. 除最后元素在外, 均有"唯一的后继"
4. 除第一元素之外, 均有"唯一的前驱"

2.1 线性表的类型定义
	定义
	基本操作:
	1. {结构初始化} InitList(&L) 
	   操作结果: 构造一个空的线性表L
	2. {销毁结构} DestroyList(&L) 
	   初始条件: 线性表L不存在; 
	   操作结果: 销毁线性表L
	3. {引用型操作} : 操作的结果不改变这个线性表的结构
	   ListEmpty(L)	判断线性表是否为空表
			初始条件: 线性表L已存在
			操作结果: 若L为空表, 则返回TRUE, 否则FALSE
	   ListLength(L) 求线性表的长度
			初始条件: 线性表L已存在
			操作结果: 返回L中元素的个数
	   PriorElem(L, cur_e, &pre_e) 求元素的前驱
			初始条件: 线性表L已存在
			操作结果: 若cur_e是L的元素, 但不是第一个, 则用pre_e返回它的前驱, 否则操作失败, pre_e无定义
	   NextElem(L, cur_e, &next_e) 求元素的后继
			初始条件: 线性表L已存在
			操作结果: 若cur_e是L的元素, 但不是最后一个, 则用next_e返回它的后继, 否则操作失败, next_e无定义
	   GetElem(L, i, &e) 求某个位序上的元素
			初始条件: 线性表L已存在, 1 <= i <= LengthList(L)
			操作结果: 用e返回L中第i个元素的值
	   LocateElem(L, e, compare()) 对线性表中的元素的判断
			初始条件: 线性表L已经存在, compare()是元素判定函数
			操作结果: 返回L中第一个与e满足关系compare()的元素的位序. 若这样的元素不存在, 则返回值为0
	   ListTravese(L, visit()) 遍历
			初始条件: 线性表L已存在
			操作结果: 依次对L的每个元素调用函数visit(). 一旦visit()失败, 则操作失败
	4. {加工型操作} 操作的结果改变了这个线性表结构
	   ClearList(&L) 将线性表清空
			初始条件: 线性表L已存在
			操作结果: 将L重置为空表
	   PutElem(L, i, &e) 向i位的元素赋新的值
			初始条件: 线性表L已存在, 1 <= i <= LengthList(L)
			操作结果: L中第i个元素赋值同e的值
	   ListInsert(&L, i, e) 插入元素
			初始条件: 线性表L已存在, 1 <= i <= LengthList(L) + 1
			操作结果: 在L的第i个元素之前插入新的元素e, L的长度增1
	   ListDelete(&L, i, &e) 删除元素
			初始条件: 线性表L已存在且非空
			操作结果: 删除L的第i个元素, 并用e返回其值, L的长度减1
	利用上述定义的线性表, 可以完成其他更复杂的操作
	例一: 求两个集合A, B的交集
	解决代码: 


	例二: 剔除非纯集合B中的重复项
	解决代码: 

	如果Lb实现排序完毕, 那么算法可以如下: 

	例三: 归并两个"其数据元素按值非递减有序排列的"线性表La和Lb, 求得线性表Lc也具有同样特性
	1. 分别从La和Lb中取得当前元素ai和bj;
	2. 若ai<=bj, 则将ai插入到Lc中, 否则将bj插入到Lc中
	算法如下:

2.2 线性表类型的实现 - 顺序映像
	用一组地址连续的存储单元 依次存放线性表中的数据元素
	第一个元素的存储地址称为线性表的起始地址, 也即基地址, 其他所有元素的存储位置都取决于此基地址
	顺序映像的C语言描述:		

今天就开始讲各种抽象数据结构了

首先讲的就是线性表, 所谓线性, 指的是按一定次序排列的列表

我想到的就是数组, 集合类...

后面是线性表的特征, 总之就是一条线的感觉, 就像排队一样站, 很容易联想起来以前做操

线性表的定义, 哗...那么长的数学符号...我打不出来...也懒得大, 大家凑合看把, 意思理解OK

在后面是线性表的基本操作

是不是觉得很面熟啊, 反正我是觉得很面熟, 这丫的不就是集合类的通用操作...

下面就是几个例子, 我感觉算法和数据结构都在讲...

最后用C写了个顺序表, 具体的还得明天继续看

今天就写这么多把...可能是手受伤了...心情受影响...没联想起来太多东西
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值