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次操作...