線性表 鍊錶

2021-08-22 12:58:38 字數 3193 閱讀 4650

鍊錶的基本操作和常見演算法(definition only)

#include /**

* author: art1st-d

* date: 2018/08/09

*/typedef int elemtype;

//單鏈表

typedef struct lnode lnode, *linklist;

//雙鏈表

typedef struct dnode dnode, *dlinklist;

/******************** function definitions ********************/

linklist creatlist_h(linklist &l); //頭插法建立單鏈表

linklist creatlist_r(linklist &l); //尾插法建立單鏈表

lnode *getelem(linklist l, int n); //獲取鍊錶第n個元素

lnode *locateelem(linklist l, elemtype e); //按值查詢表結點

//不帶頭結點實現以下方法

void del_x(linklist &l, elemtype x); //刪除鍊錶中值為x的元素

//帶頭結點實現以下方法

void del_x_h(linklist &l, elemtype x); //刪除鍊錶中值為x的元素

void reverse_print(linklist l); //從尾到頭輸出結點值

linklist delete_min(linklist &l); //刪除最小結點

linklist reverse(linklist l); //就地逆置

void sort(linklist &l); //使元素遞增有序

void rangedelete(linklist &l, int min, int max); //刪除min與max之間元素(鍊錶無序)

linklist search_1st_common(linklist l1, linklist l2); //找出兩個鍊錶的公共結點

void min_delete(linklist &l); //按遞增次序輸出各個結點,並釋放其儲存空間

linklist discreate(linklist &a); //將a分解為a、b兩個鍊錶,a保留奇數項,b保留偶數項,保證相對次序不變

void delete_same(linklist &l); //刪除相同元素,l遞增有序

void merge(linklist &a, linklist &b); //合併兩個遞增有序鍊錶ab為乙個遞減有序鍊錶,並使用原結點

linklist get_common(linklist a, linklist b); //從遞增有序的ab中找出公共元素表c,不破壞ab結點

linklist union(linklist &a, linklist &b); //求ab交集,放入a中

bool pattern(linklist a, linklist b); //兩個整數序列已存入ab,判斷b是否a的連續子串行

int search_k(linklist l, int k); //查詢鍊錶導數第k個元素並輸出

lnode* find_addr(lnode *a, lnode *b); //找出共同字尾的起始位置

void abs_del(lnode &l); //刪除l中絕對值相等的元素,只保留第乙個

bool symmetry(dlinklist l); //判斷迴圈雙鏈表是否對稱

linklist link(linklist &h1, linklist &h2); //鏈結兩個迴圈單鏈表,鏈結後依然迴圈

void delete_all(linklist &l); //反覆輸出迴圈單鏈表最小元素並刪除

dlinklist locate(dlinklist &l, elemtype x); //雙向鍊錶插入、刪除、查詢

/******************** function implementations ********************/

linklist creatlist_h(linklist &l)

linklist creatlist_r(linklist &l)

lnode *getelem(linklist l, int n)

lnode *locateelem(linklist l, elemtype e)

void del_x(linklist &l, elemtype x)

void del_x_h(linklist &l, elemtype x)

void reverse_print(linklist l)

linklist delete_min(linklist &l)

linklist reverse(linklist l)

void sort(linklist &l)

void rangedelete(linklist &l, int min, int max)

linklist search_1st_common(linklist l1, linklist l2)

void min_delete(linklist &l)

linklist discreate(linklist &a)

void delete_same(linklist &l)

void merge(linklist &a, linklist &b)

linklist get_common(linklist a, linklist b)

linklist union(linklist &a, linklist &b)

bool pattern(linklist a, linklist b)

int search_k(linklist l, int k)

lnode* find_addr(lnode *a, lnode *b)

void abs_del(lnode &l)

bool symmetry(dlinklist l)

linklist link(linklist &h1, linklist &h2)

void delete_all(linklist &l)

dlinklist locate(dlinklist &l, elemtype x)

int main()

線性表 鍊錶

線性表的adt list.h 線性表的c 抽象類宣告 templateclass list 單鏈表節點的定義 link.h 單鏈表節點類的定義 template class link link link nextval null 鍊錶的實現宣告 成員函式的是實現 鍊錶的實現宣告 include st...

線性表 鍊錶

include include typedef int elemtype typedef struct node lnode,linklist linklist createlinklist1 頭插法 linklist createlinklist2 尾插法 void lengthlinklist ...

線性表,鍊錶

資料的儲存結構分為鏈式儲存結構,線性儲存結構。不管什麼型別的資料結構,都會以這兩種儲存方式在計算機中儲存。線性儲存結構就是開闢一段連續的記憶體 記憶體大小已經確定 將資料儲存在這段連續記憶體中,這種儲存結構的優點是可以快速地取出元素,時間複雜度為o 1 缺點是插入和刪除需要移動大量的元素,時間複雜度...