鍊錶煉表有一系列不必再記憶體中連續的結構組成,不需要使用位址連續的儲存單元。它是通過「鏈」來建立邏輯關係的,因此在對鍊錶進行插入,刪除操作時不需要移動元素,而只需要修改指標即可。
鍊錶分類:按是否包含指向前繼的指標可分為單鏈表和雙向鍊錶;按是否成環狀可以分為迴圈鍊錶和非迴圈鍊錶。
由於連表示離散的分布在儲存空間的,因此鍊錶是非隨機訪問的,只能從某個特定節點開始遍歷一次查詢。
通常為方便操作,在鍊錶第乙個節點前附加乙個頭節點,頭節點的指標與指向鍊錶的第乙個元素節點。
每個結構含有表元素和指向包含該元素後繼的結構的指標。除了頭節點,每乙個結點都有唯一的前繼。除最後乙個結點,每乙個結點都有乙個後繼。
插入:刪除:
雙向鍊錶與單鏈表的不同之處在於,雙向鍊錶的每個結點含有兩個指標域,其中乙個指向直接前繼,乙個指向直接後繼。這樣雙向鍊錶可以沿兩個方向進行遍歷;
插入:刪除:
struct lnode ;
typedef struct lnode *ptrtolnode;
typedef ptrtolnode list;
list list_init(void)
int list_isempty(list l)
void list_print(list l)
printf("\n");
}void list_pre_create(list l)//頭插法建立單鏈表
}void list_post_create(list l)//尾差法建立單鏈表
r->next = null;
}ptrtolnode list_findpre(list l, ptrtolnode r)//返回結點r的直接前繼
return pre;
}int list_length(list l)//求鍊錶長度
return length;
}void list_insert(list l, position p, elementtype x)//在結點p處插入新節點
ptrtolnode list_findmid(list l)//返回中間元素結點
printf("%d\n", p->e);
return p;
}void list_delete(list l, elementtype x)//刪除節點
else }}
void list_deleterepeat(list l)//刪除有序鍊錶中重複元素的結點
else }}
ptrtolnode list_last_k(list l, int k)//返回倒數第k個結點
for (int i = 0; i < k; ++i)
r = r->next;
while (r)
printf("%d\n", p->e);
return p;
}/*若兩單鏈表有公共結點,則從起始公共結點至尾結點兩者均相同,因此將兩鍊錶尾部對齊,開始比較第乙個相同結點即為起始公共結點*/
ptrtolnode list_commonnode(list l1, list l2)//返回兩單鏈表的公共起始節點
else
while (dist--)
longlist = longlist->next;
while(longlist && longlist->e != shortlist->e)
ptrtolnode p = longlist;
while (p)
return longlist;
}void list_reverse(list l)//
l->next = p;//p結點將成為你逆置後的第乙個節點,將頭節點指向該節點
}
void list_reverse1(list l)//利用頭插法逆置鍊錶}
list list_reverse1(list l, int m, int n)//逆置第m個結點至第n個結點結點
//prefirst指向第m-1個結點
first = p;//first指向第m個結點
for (int i = m; i <= n; ++i) //利用頭插法將m至n結點逆置
first->next = p;//將first的指標域指向第n+1個結點
return l;
}
棧ADT的鍊錶實現
棧adt鍊錶實現的型別宣告 struct node typedef struct ndoe ptrtonode typedef ptrtonode stack struct node 測試是否為空棧 int isempty stack s 建立空棧 stack createstack void 清空...
鍊錶ADT實現 C語言 2018 3 11
include include define name to str name name 定義結點及結構體指標,結構體指標linklist為煉表頭結點指標 typedef struct lnodelnode,linklist 結構體指標 初始化鍊錶 lnode init ll 在第pos個結點之前插...
C語言鍊錶ADT
這是乙個以listdata 乙個結構體 為資料域的鍊錶,如需使用,請在list.h中修改對它的定義。鍊錶list 資料結構體listdata 在list.件裡的注釋已經明確說明各個函式的作用 引數與返回值,不再贅述 與陣列相同,下標從0開始 使用前,先用newlist 函式建立鍊錶 使用後,記得用d...