資料結構 單鏈表 基礎

2021-08-02 09:44:14 字數 2408 閱讀 5065

在實現單鏈表的基本功能後

單鏈表的幾個基本問題:

1.比較順序表和煉表的優缺點,說說它們分別在什麼場景下使用?

順序表(物理位置相鄰):優點:在一段記憶體中用陣列連續存放,所以方便隨機查詢元素。

缺點:動態開闢,容易造成記憶體浪費,需要乙個元素,開闢過多。前面新增元素時,要逐個挪動後面的每個元素,較麻煩。

場景:資料頻繁查詢修改,但很少新增。

單鏈表(物理位置不相鄰):優點:方便開闢,用多少開闢多少,不會造成記憶體空間浪費。

缺點:不方便直接查詢。

場景:頻繁新增資料,但很少查詢。

2.從尾到頭列印單鏈表 :

可以運用遞迴的方法從尾到頭列印。

從頭節點向後遞迴,結束條件當節點為空

返回輸出該節點的值。

void printtailtohead(listnode *plist) //逆序列印 用遞迴

3.刪除乙個無頭單鏈表的非尾節點 :

1.將後面節點的值賦給pos

2.刪除pos

void erasenontail(listnode *pos) //無頭刪除指定非尾節點

4.在無頭單鏈表的乙個節點前插入乙個節點:

1.在pos後面插入一節點

2.將pos與後面的值交換

void insertnonfront(listnode *pos, datatype x) //在無頭單鏈表的乙個節點前插入乙個節點

5.單鏈表實現約瑟夫環 :

已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下乙個人又從1開始報數,數到m的那個人又出列;依

此規律重複下去,直到圓桌周圍的人全部出列。

倆個迴圈 裡迴圈走數k個,將第k個刪除。外迴圈從刪除後下乙個再開始直到剩下乙個節點。

listnode* joseohring(listnode *plist, int k)//約瑟夫環

listnode *next = cur->next;

cur->data = next->data;

cur->next = next->next;

free(next);

} return cur;

}

6.逆置/反轉單鏈表 

listnode* reverse(listnode *plist)//鍊錶的逆置

return newhead;

}}

7.單鏈表排序(氣泡排序|快速排序)

void bubblesort(listnode *plist)//氣泡排序

next = next->next;

cur = cur->next;

}if (exchange == 0)

return;

tail = cur;

} }}

8.合併兩個有序鍊錶,合併後依然有序

listnode* mergelist(listnode *plist1, listnode *plist2)//歸併排序

else

listnode *tail = list;

while (plist1 && plist2)

else

tail = tail->next;

}if (plist1)

tail->next = plist1;

else

tail->next = plist2;

return list;

}}

9.查詢單鏈表的中間節點,要求只能遍歷一次鍊錶 

定義 fast 與 slow fast每走2個slow走乙個 fast走完全部,slow走了一半 為中節點

listnode* findmidnode(listnode *plist)//查詢單鏈表的中間節點

if (fast == null)

slow = prev;

return slow;

}

10.查詢單鏈表的倒數第k個節點,要求只能遍歷一次鍊錶

將fast先走k-1 然後與slow同時走 fast走動尾節點時,slow為倒數第k節點

//k<=鍊錶個數

listnode* findtailknode(listnode *plist, datatype k)//查詢單鏈表的倒數第k個節點

while (fast->next)

return slow;

}

資料結構基礎 單鏈表

關於單鏈表的一些基本操作,以下為基本思路 首先看一張直觀圖 鍊錶的結構體定義如下 為簡便,這裡的elemtype採用int 單鏈表 typedef struct lnode linklist 接下來肯定就是建立鍊錶,而目前建立單鏈表分為兩種方式,分別是 頭插法 與 尾插法 首先看圖示 清楚明白 我們...

資料結構基礎之單鏈表

資料結構基礎之單鏈表 對單鏈表的建立,插入,刪除,逆序,列印元素做乙個小小的總結,不過我不覺得這些東西在具體的工作後到底能發揮什麼作用,因為強大的stl已經把這些都做好了,我們只需要明白在什麼場合使用哪乙個stl就可以了。鍊錶有乙個資料域,有乙個指標域,它的操作其實就是對指標域的操作,無非是指來指去...

資料結構基礎之單鏈表

資料結構基礎之單鏈表 對單鏈表的建立,插入,刪除,逆序,列印元素做乙個小小的總結,不過我不覺得這些東西在具體的工作後到底能發揮什麼作用,因為強大的stl已經把這些都做好了,我們只需要明白在什麼場合使用哪乙個stl就可以了。鍊錶有乙個資料域,有乙個指標域,它的操作其實就是對指標域的操作,無非是指來指去...