(6)求某个数据元素值GetElem(L,i, e)该运算返回L中第i(1≤i<ListLength(L)个元素的值,存放在e中。intGetElem(SqList *L,inti,ElemType &eif (i<1 I i>L->length)return 0e=L->data[i-1];return 1:本算法的时间复杂度为O(1)26
26 (6)求某个数据元素值 GetElem(L,i,e) 该运算返回L中第 i(1≤i≤ListLength(L))个元 素的值,存放在e中。 int GetElem(SqList *L, int i, ElemType &e) { if (i<1 || i>L->length) return 0; e=L->data[i-1]; return 1; } 本算法的时间复杂度为O(1)
(7)按元素值查找LocateElem(L,e)该运算顺序查找第1个值域与e相等的元素的位序。若这样的元素不存在,则返回值为0。int LocateElem (SqList *L, ElemType e)int i=0;while (i<L->length&& L->datalil!=e)i++sif (i>=L->length)return O;else return i+l;时间复杂度为:O(L->length)或O(n)27
27 (7)按元素值查找 LocateElem(L, e) 该运算顺序查找第1个值域与e相等的元素的 位序。若这样的元素不存在,则返回值为0。 int LocateElem (SqList *L, ElemType e) { int i=0; while (i<L->length && L->data[i]!=e) i++; if (i>=L->length) return 0; else return i+1; } 时间复杂度为: O(L->length)或O(n)
(8)插入数据元素ListInsert(L ,i, e)该运算在顺序表L的第i个位置(1<i<ListLength(L)+1)上插入新的元素e。如果值不正确,则显示相应错误信息:否则将顺序表原来第个元素及以后元素均后移一个位置,腾出一个空位置插入新元素,顺序表长度增1。28
28 (8)插入数据元素 ListInsert(L,i,e) 该 运 算 在 顺 序 表 L 的 第 i 个 位 置 (1≤i≤ListLength(L)+1)上插入新的元素e。 如果i值不正确,则显示相应错误信息; 否则将顺序表原来第i个元素及以后元素均后 移一个位置,腾出一个空位置插入新元素, 顺序表长度增1
线性表操作ListInsert(&L,i,e)的实现:首先分析:插入元素时,线性表的逻辑结构发生什么变化?29
29 线性表操作 ListInsert(&L,i,e)的实现: 首先分析: 插入元素时, 线性表的逻辑结构发生什么变化?
(a...,a1.a,..,an)改变为(ai. .... aii. e.a,..... ar<ai-1'<ai-1e>.<e,a:>aaa1azai-1na:aa.eai-1az表的长度增130
30 (a1,.,ai-1,ai,.,an ) 改变为 a1 a2 . ai-1 ai . an a1 a2 . ai-1 e ai . an <ai-1,ai> <ai-1,e>, <e,ai> 表的长度增1 (a1,.,ai-1, e, ai, .,an )