Data Structures and Algorithms in C
1.0.0
在這裡,您會發現C中實現的一些數據結構和算法。這些算法主要基於Thomas H. Cormen的算法簡介。
每個模塊由至少一個標頭文件(.h)和一個包含代碼語料庫(.c)的源文件組成。為了使用這些模塊之一,我建議您遵循以下步驟:
/modules所需的數據結構或算法List.c )的模塊目錄(例如/modules/List )/include/ folder,查找所需的標題(.h)文件(例如List.h )並下載。#include "foo.h" )。大多數模塊包括例如HashFunctions或Comparators甚至其他數據結構。發現所需的內容並下載所有文件。#include "foo.h" 。如果克隆整個文件夾,則可以運行:
make :這使每個模塊變得富裕make run-tests :彙編每個模塊並執行所有測試make valgind-tests :它編譯每個模塊並使用Valgrind執行所有測試| 數據結構 | 定義 |
|---|---|
| 布盧姆過濾器 | Bloom Filter是一種由伯頓·霍華德·布魯姆(Burton Howard Bloom)在1970年構思的概率數據結構,用於測試元素是否是集合的成員。誤報匹配是可能的,但是假否定性不是 - 換句話說,查詢返回“可能在集合中”或“絕對不在集合中”。可以將元素添加到集合中,但不能刪除(儘管可以使用計數Bloom Filter變體來解決);添加的項目越多,誤報的概率就越大。 |
| 紅黑樹 | 紅色 - 黑樹是一種自我平衡的二進制搜索樹。每個節點都存儲一個代表“顏色”(“紅色”或“黑色”)的額外位,用於確保在插入和刪除過程中樹保持平衡。修改樹時,新樹將被重新排列並“重新粉刷”以恢復著色屬性,以限制在最壞情況下樹的不平衡。這些屬性的設計使得可以有效地進行重新安排和重新著色。重新平衡並不是完美的,但可以保證在O(logn)時間搜索,其中n是樹的節點的數量。插入和刪除操作以及樹的重排和重新上色也在O(logn)時間進行。 |
| 鏈接列表 | 鏈接列表是數據元素的線性集合,其順序不通過其物理位置在內存中給出。相反,每個元素指向下一個。它是一個數據結構,該數據結構由共同代表序列的節點集合組成。 |
| 隊列 | 優先隊列是一種抽像數據類型,類似於常規隊列或堆棧數據結構,其中每個元素還具有與之相關的“優先級”。在優先級的隊列中,在優先級較低的元素之前提供了高優先級的元素。 |
| 列表 | 一般實現非常簡單的鍵和鏈條。沒有提供重建。 |
| 用紅黑樹刺 | 由一張桌子組成,其中每行都有一個指向紅色樹的指針,我們得到了上述最佳複雜性,同時避免了太多的碰撞。 |
| 用水桶到紅黑樹的檯面 | 標籤由一桶指向紅色的黑樹組成 |
| 麥克什普 | 最大 - 蜂座是一個完整的二進制樹,其中每個內部節點中的值大於或等於該節點的子女的值。將堆的元素映射到數組中是微不足道的:如果一個節點存儲為索引K,則其左子女存儲在索引2K+1中,而其右子則以index 2k+2為單位。 |
| 分離 | 分離集合數據結構(也稱為Unim-Fend數據結構或合併 - 輸入集)是一個數據結構,該數據結構存儲了分離集合(非重疊)集的集合。同等地,它將集合的分區存儲到不相交的子集中。它提供了添加新集合,合併集合(通過其工會代替)並找到一組代表成員的操作。最後一個操作允許有效找出是否有兩個元素在相同或不同的集合中。 |
| 帶有線程的工作調度程序 | 使用UNIX PTHREADS的多線程作業調度程序。 |
| 演算法 | 定義 |
|---|---|
| heapsort | Hepsort是一種基於比較的排序算法。可以將heperort視為改進的選擇:類似選擇的選擇,Hepsort將其輸入分為一個分類和未分類的區域,並且它通過從中提取最大元素並將其插入到分類區域中,從而迭代地收縮了未分類的區域。與選擇排序不同,hepsort不會浪費時間,並在未分類區域的線性時間掃描中浪費時間。相反,Heap排序在堆數據結構中維護未排序的區域,以更快地找到每個步驟中最大的元素。 |
| QuickSort | QuickSort是一種有效的排序算法。它由英國計算機科學家托尼·霍爾(Tony Hoare)於1959年開發,並於1961年出版,仍然是一種用於分類的算法。如果實現良好,它的速度可能比合併排序更快,並且比Heapsort快兩到三倍。 |
| 公用事業 | 定義 |
|---|---|
| 比較器 | 比較兩個值並返回0,> 0,<0的函數 |
| 哈希功能 | 字符串哈希功能 |
為了測試已創建的模塊,我使用了庫acutest.h 。
有關Acutest庫的更多信息
創建簡單程序(主要功能)作為所有模塊的使用示例。
☑️與Myrto Iglezou合作製作了一些模塊。 ☑️
©Konstantinos Nikoletos | 2021