- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构,第二章,线性表
;2.1 线性表的类型定义;知识点:
重点:
难点:;课前思考:;2.1
线性表的类型定义;1、线性表的定义:;3、抽象数据类型线性表的定义:; InitList( L )
;GetElem( L, i, e ); 假设上述基本操作已经实现,则可以利用上述定义的线性表基本操作,来实现其它更复杂的操作;2.2 线性表类型;
用一组地址连续的存储单元 依次存放
线性表中的数据元素的存储结构
;以“存储位置相邻”表示有序对ai-1,ai
即:LOC(ai) = LOC(ai-1) + C
一个数据元素所占存储量↑;存储地址 内在状态 数据元素在线性表的位序;;四.线性表的静态顺序存储结构的 C 语言描述
(补充内容);(1)查找:
在顺序表L中查找第i个元素。
(2)求长度:
求顺序表L中元素的个数。
(3)插入:
在顺序表L中第i个元素前插入元素b。
;(4)删除:
在顺序表L中删除第i个元素。
;六.线性表的动态顺序存储结构的 C 语言描述;InitList(L) // 构造一个空表;1.构造一个空线性表: InitList(L) ;Status InitList_Sq( SqList L ) {
// 构造一个空的线性表
} // InitList_Sq;例如:顺序表; int LocateElem_Sq(SqList L, ElemType e,
Status (*compare)(ElemType, ElemType)) {
// 在顺序表中查询第一个满足判定条件的数据元素,
// 若存在,则返回它的位序,否则返回 0
} // LocateElem_Sq;3.插入操作
ListInsert(L, i, e)的实现:; (a1, …, ai-1, ai, …, an) 改变为
(a1, …, ai-1, e, ai, …, an); a.[检测参数i是否合法及空间是否足够]
b.[插入位置及之后的元素右移];c.[插入]
d.[修正表长]
e.[算法结束]
;21 18 30 75 42 56 87; Status ListInsert_Sq(SqList L, int i, ElemType e) {
// 在顺序表L的第 i 个元素之前插入新的元素e,
// i 的合法范围为 1≤i≤L.length+1
} // ListInsert_Sq ;if (L.length = L.listsize) {
// 当前存储空间已满,增加分配
newbase = (ElemType *)realloc(L.elem,
(L.listsize+LISTINCREMENT)*sizeof (ElemType));
if (!newbase) exit(OVERFLOW);
// 存储分配失败
L.elem = newbase; // 新基址
L.listsize += LISTINCREMENT; // 增加存储容量
};考虑移动元素的平均情况:;首先分析:; (a1, …, ai-1, ai, ai+1, …, an) 改变为
(a1, …, ai-1, ai+1, …, an); a.[检测参数i]
b.[删除元素之后的所有元素左移];d.[修正表长]
e.[算法结束]
;21 18 30 75 42 56 87;Status ListDelete_Sq
(SqList L, int i, ElemType e) {
} // ListDelete_Sq;考虑移动元素的平均情况:; 所以,若表长为n, 则插入和删除
算法的时间复杂度都为:;思考题: 有两个有序的顺序表LA(有m个元素)和LB(有n个元素)其元素均以从小到大的升序排列,编写一个函数将它们合并成一个顺序表LC,并要求C的仍保持其有序性。
文档评论(0)