鍊錶ADT實現

2021-07-16 18:59:54 字數 2256 閱讀 3404

鍊錶煉表有一系列不必再記憶體中連續的結構組成,不需要使用位址連續的儲存單元。它是通過「鏈」來建立邏輯關係的,因此在對鍊錶進行插入,刪除操作時不需要移動元素,而只需要修改指標即可。

鍊錶分類:按是否包含指向前繼的指標可分為單鏈表和雙向鍊錶;按是否成環狀可以分為迴圈鍊錶和非迴圈鍊錶。

由於連表示離散的分布在儲存空間的,因此鍊錶是非隨機訪問的,只能從某個特定節點開始遍歷一次查詢。

通常為方便操作,在鍊錶第乙個節點前附加乙個頭節點,頭節點的指標與指向鍊錶的第乙個元素節點。

每個結構含有表元素和指向包含該元素後繼的結構的指標。除了頭節點,每乙個結點都有唯一的前繼。除最後乙個結點,每乙個結點都有乙個後繼。

插入:刪除:

雙向鍊錶與單鏈表的不同之處在於,雙向鍊錶的每個結點含有兩個指標域,其中乙個指向直接前繼,乙個指向直接後繼。這樣雙向鍊錶可以沿兩個方向進行遍歷;

插入:刪除:

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...