線性表 鍊錶

2021-09-27 13:36:49 字數 1889 閱讀 3496

單鏈表定義

typedef

struct lnodelnode,

*linklist;

雙鏈表定義
typedef

struct dnodednode,

*dlinklist;

靜態鍊錶定義
#define maxsize 50    

//靜態鍊錶的最大長度

typedef

struct

slinklist[maxsize]

;

頭插法建立單鏈表
linklist creatlist1

(linklist &l)

return l;

}

尾插法建立單鏈表
linklist creatlist2

(linklist &l)

r->next =

null

;//尾結點指標置空

return l;

}

按序號查詢結點
lnode *

getelem

(linklist l,

int i)

return p;

//返回第i個結點的指標,如果i大於表長,p=null,直接返回p即可

}

按值查詢表結點
lnode *

locateelem

(linklist l, elemtype e)

else

del_x_3

(l->next, x)

;}

有讀者認為直接free掉p結點會造成斷鏈,實際上因為l為引用,是直接對原鍊錶進行操作,因此不會斷鏈。(王道原話)

2.在帶頭結點的單鏈表l中,刪除所有值為x的結點,並釋放其空間,假設值為x的結點不唯一

void

del_x_1

(linklist &l, elemtype x)

else

}//while

}

void

del_x_2

(linklist &l, elemtype x)

else

}//while

r->next =

null

;//插入結束後置尾結點指標為null

}

3.設l為帶頭結點的單鏈表,編寫演算法實現從尾到頭反向輸出每個結點的值

棧 遞迴

void

r_print

(linklist l)

print

(l->data)

;//輸出函式

}

4.試編寫在帶頭結點的單鏈表l中刪除乙個最小值結點的高效演算法(假設最小值結點是唯一的)
linklist delete_min

(linklist &l)

pre = p;

//繼續掃瞄下乙個結點

p = p->next;

} minpre->next = minp->next;

//刪除最小值結點

free

(minp)

;return l;

}

5.試編寫演算法將帶頭結點的單鏈表就地逆置,就地,是指空間複雜度為o(1)

解法一:將頭結點摘下,然後從第乙個結點開始,依次前插入到頭結點的後面(頭插法建立單鏈表),直到最後乙個結點為止

linklist reverse_1

(linklist l)

return l;

}

解法二:

(未完待續…)

線性表 鍊錶

線性表的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 缺點是插入和刪除需要移動大量的元素,時間複雜度...