在實現單鏈表的基本功能後
單鏈表的幾個基本問題:
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就可以了。鍊錶有乙個資料域,有乙個指標域,它的操作其實就是對指標域的操作,無非是指來指去...