顺序表及其运算
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.2 顺序表及其运算
1. 顺序表初始化 为存储线性表动态分配数组空间,置初始线性表为空
void InitList (SeqList *L ) { // 动态分配存储空间
L ->List =(ElemType*)malloc(MaxSize*sizeof(ElemType)) ;
if ( ! L->list ) {printf( " Memory allocation failure ! \n" ) ; exit (1) ; }
{ ak
A与A 的关系:a k = item
0 ≤k< i k=i
实现算法:
ak-1
i <k≤len
考虑因素:☛ 表长不能超出给定空间——上溢处理
☛ 若所给插入位置不合理,要处理
☛ 正常插入操作后表长应增加1
2.2 顺序表及其运算
算法描述:
void insertlist (SeqList *L, ElemType item, int i )
int LenthList (*L) ;
// 求表的长度
void SortList (*L) ;
// 按关键字值对表元素排序
void TraverseList (*L) ; // 对表进行遍历并输出
void ClearList (*L) ;
// 清除表中所有元素
}
2.2 顺序表及其运算
一、什么是顺序表 顺序表——线性表的顺序存储(向量式存储) 存储方法: 表中元素按逻辑顺序依次放在连续存储空间中; 每个元素所占存储单元长度相同;
例: 1
a1
2
a2
3
a3
4
a4
:
:
: :
an-1
n
an
利用数组实现线性表的顺序存储,要求:
数组长度 > 表长度
表中元素地址计算: ADR( ai )=ADR( a1 ) + ( i -1 )* k k——为每个元素所占字节数;
2.2 顺序表及其运算
二、 顺序表的运算 若对表示顺序表的数组空间采用动态分配, 对顺序表结构作如下定义:
2.1 线性表的概念
二、线性表的抽象数据类型 数据部分:
数据元素,数据元素之间的关系描述;
操作部分:
根据应用需要确定 按照功能可以归纳为以下基本类型: • 属性设置:确定类型的基本属性值; • 读取属性:读取类型的属性值; • 插入:在对象的指定位置加入新的数据元素; • 删除:删除对象中的指定数据元素; • 查找:在对象查找满足条件的数据元素; • 遍历:按某种方式不重复地访问对象中所有数据元素; • 关系访问:访问对象中有特定关系的元素;
{ int j ;
if ( L->len ==MaxSeze )
// 若表空间满,不能插入
{ printf ("表满!\n") ;
exit (1) ;
R={ ( ai, ai+1) | i=1, 2, …, n-1 } ; 也可以简单表示为: B=( a1, a2, …, ai, …, an ) 表中元素个数 n —— 表长度, n=0 时称为空表;
结构特性:① 元素之间具有线性关系 (元素在位置上有序); ② 元素在表中的位置由其序号决定; ③ 表长度可变;
2.5 数组与矩阵的表示
一、数组的顺序分配 二、规则矩阵的压缩存储 三、稀疏矩阵的三元组顺序表表示
2.1 线性表的概念 一、线性表的结构特性
属性相同的数据元素按某种关系排列的表 例: 农历节气表
( 立春, 雨水, 惊蛰, 春分, 清明, ……, 大雪, 冬至, 小寒, 大寒 ) ——表中元素是字符
2.1 线性表的概念
ADT LIST {数据:
线性表 操作:
L= ( a0, a1, … , an) , n≥0 ;
void InitList ( *L) ;
// 初始化 L指向的线性表
ElemType GetElemlist (*L, int pos ) ; // 得到表中第pos个元素
int FindList ( *L, ElemType item ) ; // 查找给定关键字元素
第二章 线性表的顺序存储及其运算
2.1 线性表的概念
一、线性表的结构特性 二、线性表的抽象数据类型
2.2 顺序表及其运算
一、什么是顺序表 二、顺序表的运算
2.3 栈
一、栈的概念 二、栈的抽象数据类型 三、顺序栈及其操作实现 四、栈应用例
第二章 线性表的顺序存储及其运算
2.4 队列
一、队列及其抽象数据类型 二、顺序队列及其操作实现 三、队列应用例 四、优先队列
// 修改表中指定元素
int ModifyList (*L, ElemType item ) ;
2.1 线性表的概念
int InsertList (*L, ElemType item ) ; // 向表中插入元素
int DeleteList (*L, ElemType item ) ; // 删除表中元素
抗灾衣被捐赠登记表 —— 按捐赠时间先后 ( 单位, 姓名, 棉被, 棉衣裤, 毛衣裤, 帽类 )
奥运会各国家队奖牌数统计表—— 按金牌、银牌、铜牌数多少 ( 国家, 金牌数, 银牌数, 铜牌数 ) ——表中元素为记录
2.1 线性表的概念
线性表( Linear List ) ——具有相同特性数据元素的有限序列; 可描述为:B=( D, R ) D={ ai | i=1, 2, …, n } ;
L->len =wenku.baidu.com0 ; // 置初始线性表为空 }
2.2 顺序表及其运算
2. 顺序表的插入运算
在表中第 i个位置插入一个元素 item 设表长为 len 插入前:A= ( a0, a1, …, ai-1, ai, …, alen-1 ) 表长为 len 插入后:A= ( a 0, a 1, …, a i-1, a i, a i+1, …, a len ) 表长为 len+1 表首元素位置不变,表向后增长
#define MaxSize 100 typedef struct
{ ElemType list[MaxSize ] ; int len ; } SeqList ;
// 存储线性表的数组 // 线性表长度
数据结构操作的实现与具体的存储结构有关
以下考虑以SeqList为类型的顺序表基本操作(运算)的实现 最基本的操作(运算):(1) 在表中插入一个元素 (2) 删除表中某个元素