- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章 线性表;线性结构;第二章 线性表;2.1 线性表的类型定义;线性表实例;线性表的特点;???性表的抽象数据类型;线性表的抽象数据类型(续); 假定线性表L1=(25,38,19,42,33), i=2, x=60, y=42,求以下操作的结果
;利用上述定义的线性表
可以实现其它更复杂的操作;问题描述:
假设利用两个线性表LA和LB分别表示两个集合A和B,现要求一个新的集合
A=A?B; 要求对线性表作如下操作:
扩大线性表 LA,将存在于线性表LB 中而不存在于线性表 LA 中的数据元素插入到线性表 LA 中去。;1.从线性表LB中依次察看每个数据元素;; { GetElem(Lb, i, e); // 取Lb中第i个数据元素赋给e
if (!LocateElem(La, e,equal))
ListInsert(La, ++La_len, e);
// La中不存在和 e 相同的数据元素,则插入之;问题描述:
已知线性表LA 和LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列.
;例如:一个有序表
(2,3,3,5,6,6,6,8,12);;2.2 线性表的顺序表示和实现;特点
逻辑上相邻的元素在物理位置上也相邻
能对任何元素进行随机存取
存储位置可用简单、直观的公式来表示
;;;顺序表下线性表操作的实现;(2).销毁线性表
Status DestroyList_Sq(SqList L){
if(L.elem) free(L.elem) // 释放分配的存储空间
L.elem=NULL;
L.length=0;
L.listsize=0;
return OK:
}//DestroyList_Sq
;顺序表下线性表操作的实现;Status ClearList_Sq(SqList L){
L.length=0; //空表长度为0
return OK:
}// ClearList_Sq
;(4) 线性表判空
Status ListEmpty_Sq(SqList L){
return (L.length==0); //空表长度为0
}// ListEmpty_Sq
(5) 求线性表长度
int ListLength_Sq(SqList L){
return (L.length);
}// ListLength_Sq;(6) 取元素
Status GetElem_Sq (SqList L, int i, Elemtype e){
if(i1||iL.length) return ERROR; //i值不合法
e=L.elem[i -1];
return OK;
}// GetElem_Sq
; int LocateElem_Sq (SqList L, ElemType e,
Status(*compare)(ElemType,ElemType)) {
// 在顺序表中查询第一个满足判定条件的数据元素,
// 若存在,则返回它的位序,否则返回 0
int i; ElemType *p;
i=1; // i 的初值为第 1 元素的位序
p=L.elem; // p 的初值为第 1 元素的存储位置
while(i=L.length !(*compare(*p++,e)) ++i;
if(i=L.length) return i;
else return 0;
} //LocateElem_Sq;;(8) 找元素的前驱
Status PriorElem_Sq (SqList L, ElemType cur_e,
Elemtype pre_e){
for(i =1; i =L.length; i ++)
if((L.elem [i-1]==cur_e) i!=1) {
pre_e=L.elem[i-2];
return OK;
else
return ERROR
文档评论(0)