一.單鏈表練習和一些功能實現
【1】單鏈表實現字典查詢
(1)定義存放數據的結構體,在每次向里面存放數據時候需要清空
(2)對字典進行切割
空格切割字母,再從剩余里切割到解釋,這里windows的txt文件下,以\r\n結尾,切除\r保留\n
(3)存放進結構體中
(4)插入鏈表,插入函數
(5)從鍵盤獲得要查詢的單詞,\n讀入需要消除
(6)進行查找
【2】單鏈表的剩余操作
(1)單鏈表的逆序
1.三個指針分別指向前中后三個節點
2.將中間節點下一個指向前節點
3.將三個指針后移一格
4.最后將最后節點的位置給頭
(2)中間元素的查找
定義兩指針,一個走兩格,一個走一格
(3)查找末尾鏈表
一個先走,然后同步走
(4)鏈表的排序
int InsertSortLinkList (LinkList *ll)
{
? // 獲取鏈表的頭節點
? LinkNode *phead = ll->head;
? // 初始化要插入的節點為頭節點的下一個節點(鏈表的第一個有效節點)
? LinkNode *pinsert = phead->next;
? // 保存下一個待處理節點,避免在插入過程中丟失鏈表的連接
? LinkNode *pnext = pinsert->next;
? // 將頭節點的 next 指針置為空,表示初始時有序區為空
? phead->next = NULL;
? // 開始排序循環
? while (1)
? {
? ? // 每次循環重新從頭節點開始遍歷,尋找合適的插入位置
? ? phead = ll->head;
? ? // 遍歷有序區,找到合適的插入位置
? ? // 條件:當前節點的下一個節點不為空,且待插入節點的年齡大于當前節點和下一個節點的年齡
? ? while (phead->next != NULL && pinsert->data.age > phead->data.age
? ? ? ? ? ?&& pinsert->data.age > phead->next->data.age)?
? ? {
? ? ? // 移動到下一個節點
? ? ? phead = phead->next;
? ? }
? ? // 如果待插入節點的年齡小于頭節點的年齡,說明它應該插入到鏈表頭部
? ? if (pinsert->data.age < phead->data.age)
? ? {
? ? ? // 將待插入節點的 next 指針指向頭節點
? ? ? pinsert->next = phead;
? ? ? // 更新頭節點為待插入節點
? ? ? ll->head = pinsert;
? ? }
? ? else
? ? {
? ? ? // 否則,將待插入節點插入到當前節點和下一個節點之間
? ? ? pinsert->next = phead->next;
? ? ? // 更新當前節點的 next 指針,使其指向待插入節點
? ? ? phead->next = pinsert;
? ? }
? ? // 更新待插入節點為下一個待處理節點
? ? pinsert = pnext;
? ? // 如果待插入節點為空,說明所有節點都已插入完成,退出循環
? ? if (NULL == pinsert) { break; }
? ? // 保存下一個待處理節點
? ? pnext = pnext->next;
? }
? // 排序完成,返回 0 表示成功
? return 0;
}