當前位置:編程學習大全網 - 編程語言 - 線性鏈表的單鏈表操作的實現

線性鏈表的單鏈表操作的實現

(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))

  • 上一篇:zigbee技術好學嗎?需要哪些基礎知識?
  • 下一篇:C#入門經典(第5版)的作者簡介
  • copyright 2024編程學習大全網