5 一些關於鍊錶的練習

2021-08-10 15:14:07 字數 2255 閱讀 9138

1 . 給定兩個已經排序好的表l1,l2,只用基本的表操作編寫計算l1∩l2的過程。

std::vectorinterse(linklist *l1, linklist *l2)

l1 = l1->next;

} return temp;

}

原理就是:遍歷l1的結點,然後找出l1的結點在l2中是否也存在,找出存在的資料就是兩個鍊錶的交集。

2 . 給定兩個已經排序好的表l1,l2,只用基本的表操作編寫計算l1∪

l2的過程。

std::vectorall(linklist *l1, linklist *l2)

while (l2!=null)

l2 = l2->next;

} return temp;

}

原理:拿到其中乙個鍊錶l1的所有資料域中的資料,然後查詢l2鍊錶中的資料在l1中不存在的,新增到容器中。其實也可以這樣,直接查詢其中乙個鍊錶l1的資料,在l2中不存在的,尾插到l2的鍊錶末尾。我感覺第二種這種方式,才比較符合題目「只用基本的表操作」,第一方式使用了容器,有點投機取巧。

3 . 編寫兩個多項式相加的函式,不要毀壞資料。

definepolynomial *merge(definepolynomial *l1, definepolynomial *l2)

else if (compare<0)

else if (compare == 0)

}// head

if (head == null)

temp = temp->next; }

temp = null;

return head;

}

原理:我是這麼想的,兩個鍊錶:首先,誰的最大指數比較大,誰排第乙個,然後依次遞推。比如第乙個鍊錶的最大指數是4,第二個鍊錶的最大指數是2(前提是多項式中的每一項的指數是遞減的),那麼應該讓新的鍊錶指向第乙個鍊錶的首元結點,接著讓第乙個鍊錶的第二個結點和第二個鍊錶的首元結點比較···用一條線將兩個鍊錶的每乙個結點連線起來,指數相等的合併係數即可。

3 . 編號為1,2,3...n的人一詞圍成一圈,從第k個人開始報數(從1開始),數到m的人退出。接著下乙個人又從1開始報數,數到m的人退出,以此類推。剩下的人的編號是多少?

如:n=6,m=3,k=1 

原始序列: 1  2  3  4  5  6 ; 從編號1開始報數 : 

第一輪數完後的序列為:  1  2  4  5  ; 3、6出列——從編號1開始報數 : 

第二輪數完後的序列為: 1  2  5 ;4出列——從編號5開始報數 : 

第三輪數完後的序列為:   1  5 ; 2 出列——從5開始報數 : 

第四輪數完後的序列為:   1  ;5 出列。

所以,最後出列的編號為1。

/*

約瑟夫環

*/game *creategame(unsigned int number)

else

}p2->next = head;

p1 = null;

free(p1);

return head;

}void startgame(game *l,int step)

if (temp == l)

else

location = null;

std::cout << std::endl;

print(l); }}

game *endnode(game *l)

return l;

}bool isend(game *l)

void print(game *l)

std::cout << l->index << std::endl;

}

原理:整個過程的核心其實就是乙個「迴圈鍊錶」來完成,這裡迴圈結束的標誌是「只剩下乙個元素」,也就是當前結點的候機還是「當前結點」。比較麻煩的是:我在構造鍊錶的時候,沒有加上「頭結點」,導致在處理首元結點的刪除等操作時候,需要特殊處理。

4 . 逆序鍊錶(不使用額外的鍊錶)

linklist *reverselinked(linklist *l)

return l;

}

原理:頭插法即可。

未完待續···

關於鍊錶的一些題目

2.刪除遞增有序鍊錶中大於min,小於max的元素 3.逆置鍊錶 4.合併兩個鍊錶 4.合併n個鍊錶 分治法 測試 前乙個與後乙個比較,相同就刪除結點,並釋放記憶體。返回頂部 先找到兩個前驅,釋放中間結點,並且將鍊錶重新鏈起來。返回頂部 public listnode reverselist lis...

關於鍊錶的一些總結

1.在鍊錶頭部新增空頭以消除頭部特殊判斷比較常見,用於刪除和新增元素,啞結點的意思就是在head第乙個節點之前設立乙個節點。2.因為鍊錶的操作有限,所以很多時候我們可以把鍊錶中的元素儲存在陣列中,進行操作。3.鍊錶從前往後遍歷元素簡單,但是從後往前遍歷元素確實困難重重,所以我們可以使用棧來儲存資料,...

關於雙向鍊錶的一些分析

一 插入操作 insert 一 基本原理 雙鏈表就好像是手拉手站成一排的人,每個人的右手 next 拉著下乙個人,左手 prior 拉著前乙個人,每兩個人之間有兩支手互聯.插入操作實際是 向隊伍中增加人員,他需要拉上左右兩邊的人,即共三個人要發生關係,由於每兩個人之間有兩支手互聯,所以要發生4次操作...