数据结构
Data Structure;第二章 线性表;提 纲;2.1 线性表的类型定义;抽象数据类型线性表的定义; 结构销毁操作;ListLength( L );NextElem( L, cur_e, next_e );LocateElem( L, e, compare( ) ); ListTraverse(L, visit( ));ClearList( L ); ListInsert( L, i, e );利用上述定义的线性表类型,可以实现其它更为复杂的操作:;有两个集合 A 和 B,分别用两个线性表 LA 和 LB 表示,即:线性表中的数据元素即为集合中的成员。 求一个新的集合A=A∪B。;1.从线性表 LB 中依次查看每个数据元素:; GetElem(Lb, i, e); // 取Lb中第i个数据元素赋给e
if (!LocateElem(La, e, equal( )) )
ListInsert(La, ++La_len, e);
// La中不存在和 e 相同的数据元素,则插入之; 若线性表中的数据元素相互之间可以比较,并且数据元素在表中按值非递减或非递增有序排列,即 ai≥ai-1 或 ai≤ai-1(i = 2,3,…, n),则称该线性表为有序表(Ordered List)。;则 ;1.初始化 LC 为空表;;void MergeList(List La, List Lb, List Lc)
{ // 本算法将非递减的有序表 La 和 Lb 归并为 Lc
;
GetElem(La, i, ai);
GetElem(Lb, j, bj);
if (ai = bj) { // 将 ai 插入到 Lc 中
ListInsert(Lc, ++k, ai); ++i; }
else { // 将 bj 插入到 Lc 中
ListInsert(Lc, ++k, bj); ++j; }
}; while (i = La_len) { // 当La不空时
GetElem(La, i++, ai);
ListInsert(Lc, ++k, ai);
} // 插入 La 表中剩余元素;最简单的一种顺序映象方法是:
令 y 的存储位置和 x 的存储位置相邻。; 定义:用一组地址连续的存储单元依次存储线性表的数据元素,称为线性表的顺序存储结构。 ;元素地址(存储位置)计算方法:
LOC(ai)=LOC(a1)+(i-1)*m
其中:m—一个元素占用的存储单元个数
LOC(ai)—线性表第i个元素的地址
LOC(a1)—线性表首址,又称为基址;;#define M 100
typedef struct{
ElemType elem[M];
int length;
} SqList;;线性表的基本操作在顺序表中的实现;Status InitList_Sq( SqList L)
{ // 构造一个空的线性表L
} // InitList_Sq; int LocateElem_Sq(SqList L, ElemType e,
Status (*compare)(ElemType, ElemType))
{ // 在顺序表中查询第一个满足判定条件的数据元素,
// 若存在,则返回它的位序,否则返回 0
} // LocateElem_Sq;线性表操作
ListInsert(L, i, e)的实现:; (a1, …, ai-1, ai, …, an) 改变为; Status ListInsert_Sq(SqList L, int i, ElemType e)
{ // 在顺序表L的第 i 个元素之前插入新的元素e,
// i 的合法范围为 1≤i≤L.length+1
if (i 1 || i L.length+1)
return ERROR; // 插入位置不合法
if (L.length = L.listsize)
{ newbase=(ElemType*)realloc(L.elem,
(L.listsize + LISTINCREMENT)* sizeof(ElemType)
if(! newbase) exit(OVERFLOW);
L.elem=newbase;
L
原创力文档

文档评论(0)