(1) 線性表的操作GetElem(L, i, &e)在鏈表中的實現: 基本操作為: 使指針p始終指向線性表中第j個數據元素 Status GetElem_L(LinkList L, int i, ElemType &e)// L為帶頭結點的單鏈表的頭指針。當線性表中存在第i個元素時,則將第i個數據元素的值賦給e並返回OK,否則返 回ERROR
{p = L->next; j = 1; // 初始化,p指向第壹個結點,j為計數器
while (p && j); // 順指針向後查找,直到p指向第i個元素或p為空
p = p->next; ++j; }
if ( !p || j>i ) return ERROR; // 第i個元素不存在 e = p->data; // 取第i個元素 return OK; } // GetElem_L算法的時間復雜度為:O(ListLength(L)) (2) 線性表的操作ListInsert(&L, i, e)在鏈表中的實現: 基本操作為: 找到線性表中第i-1個結點,修改其指向後繼的指針
有序對<ai-1, ai> 改變為 <ai-1, e> 和 <e, ai>
Status ListInsert_L(LinkList L, int i, ElemType e) { // 在帶頭結點的單鏈表L中第i個數據元素之前插入數據元素e p = L; j = 0; while (p && j < i-1) { p = p->next; ++j; } // 尋找第i-1個結點 if (!p|| j > i-1) return ERROR; // i小於1或者大於表長 s = (LinkList) malloc (sizeof (LNode)); // 生成新結點 s->data = e; s->next = p->next; // 插入L中 p->next = s; return OK; } // LinstInsert_L算法的時間復雜度為:O(ListLength(L)) (3) 線性表的操作ListDelete(&L, i, &e)在鏈表中的實現:
基本操作為: 找到線性表中第i-1個結點,修改其指向後繼的指針
有序對<ai-1, ai> 和 <ai, ai+1> 改變為<ai-1, ai+1>
Status ListDelete_L(LinkList L, int i, ElemType &e)
{ p = L; j = 0;} // 在帶頭結點的單鏈表L中,刪除第i個元素,並由e返回其值
while (p->next && j < i-1)
{p = p->next; ++j; // 尋找第i個結點,並令p指向其前趨} if (!(p->next) || j > i-1) return ERROR; // 刪除位置不合理 q = p->next; p->next = q->next; // 刪除並釋放結點 e = q->data; free(q); return OK; } // ListDelete_L算法的時間復雜度為:O(ListLength(L))