{"id":18950390,"url":"https://github.com/raphadam/datt","last_synced_at":"2026-03-28T11:30:18.229Z","repository":{"id":257783482,"uuid":"837046510","full_name":"raphadam/datt","owner":"raphadam","description":"🧰 Generic data structures and algorithms with various implementations in go. Zero Dependency.","archived":false,"fork":false,"pushed_at":"2024-08-02T05:24:49.000Z","size":15,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-01T02:13:34.796Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/raphadam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-02T05:22:55.000Z","updated_at":"2024-08-02T05:26:04.000Z","dependencies_parsed_at":null,"dependency_job_id":"fce6032a-a68a-4c2b-9eb9-1993f7d177ce","html_url":"https://github.com/raphadam/datt","commit_stats":null,"previous_names":["raphadam/datt"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphadam%2Fdatt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphadam%2Fdatt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphadam%2Fdatt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphadam%2Fdatt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raphadam","download_url":"https://codeload.github.com/raphadam/datt/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239947868,"owners_count":19723179,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-08T13:22:48.027Z","updated_at":"2026-03-28T11:30:18.167Z","avatar_url":"https://github.com/raphadam.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# datt - Go Data Structure Compilation\n\n**DATT** is compilation of various useful *data structures* using *go generics*.\n\n## Current Structures\n\nBelow some examples of currently implemented structures.\n\n### Linked List\n\n```golang\nll := datt.NewLinkedList[string]()\n\nll.PushHead(\"a\")\nll.PushHead(\"b\")\nll.PushTail(\"c\")\n\nlog.Println(ll) // [b] -\u003e [a] -\u003e [c] -\u003e nil\n\nll.PopTail()\nlog.Println(ll) // [b] -\u003e [a] -\u003e nil\n\nll.PopHead()\nlog.Println(ll) // [a] -\u003e nil\n```\n\n### Bitset\n\n```golang\na := datt.NewBitset(1) // 2 -\u003e initial byte capacity\nb := datt.NewBitset(1)\n\na.Set(1, true)\na.Set(3, true)\n\nb.Set(0, true)\nb.Set(1, true)\nb.Set(7, true)\n\nlog.Println(a) // 00001010\nlog.Println(b) // 10000011\n\na.Or(b)\nlog.Println(a) // 10001011\n\nlog.Println(a.Get(0)) // true\nlog.Println(a.Get(6)) // false\n```\n\n### Queue\n\n```golang\nqueue := datt.NewQueue[byte]()\nqueue.Enqueue(5)\nqueue.Enqueue(255)\nqueue.Enqueue(21)\nqueue.Enqueue(125)\n\nlog.Println(queue.Dequeue()) // 5\nlog.Println(queue.Dequeue()) // 255\nlog.Println(queue.Dequeue()) // 21\nlog.Println(queue.Dequeue()) // 125\n```\n\n### Stack\n\n```golang\nstack := datt.NewStack[int]()\n\nstack.Push(3)\nstack.Push(2)\nstack.Push(1)\n\nlog.Println(stack.Pop()) // 1\nlog.Println(stack.Pop()) // 2\nlog.Println(stack.Pop()) // 3\n```\n\n## Set\n\n```golang\na, _ := datt.NewSetVar(\"henry\", \"marie\", \"john\")\nb := datt.NewSet[string]()\n\nb.Append(\"tyler\")\nb.Append(\"alice\")\nb.Append(\"henry\")\n\nc := a.Union(b) // doesn't mutate a or b, create brand new set\nlog.Println(c)  // (tyler, henry, marie, john, alice)\n\nd := b.Intersection(a)\nlog.Println(d) // henry\n\nlog.Println(a.IsSubset(b)) // false\n```\n\n### Binary Search Tree\n\n```golang\ntype Human struct {\n\tAge int\n}\n\nfunc CompareOrderedHuman(current Human, other Human) datt.CompareResult {\n\tif current.Age \u003e other.Age {\n\t\treturn datt.HIGHER\n\t} else if current.Age \u003c other.Age {\n\t\treturn datt.LOWER\n\t} else {\n\t\treturn datt.EQUAL\n\t}\n}\n\nfunc main() {\n\tbst := datt.NewBinarySearchTree(CompareOrderedHuman)\n\tbst.Insert(Human{Age: 15})\n\tbst.Insert(Human{Age: 54})\n\tbst.Insert(Human{Age: 21})\n\tbst.Insert(Human{Age: 9})\n\n\tbst.Iterate(func(h Human) {\n\t\tlog.Println(h) // 9, 15, 21, 54\n\t})\n\n\tlog.Println(bst.Contains(Human{Age: 341})) // false\n\tlog.Println(bst.Contains(Human{Age: 54}))  // true\n\n\t// also works with go types\n\tother := datt.NewBinarySearchTree(datt.CompareOrdered[string])\n\tother.Insert(\"henry\")\n}\n```\n\n### Priority Queue\n\n```golang\npq := datt.NewPriorityQueue(datt.CompareOrdered[uint16])\n\npq.Push(15)\npq.Push(0)\npq.Push(7)\npq.Push(9)\n\nlog.Println(pq.Pop()) // 15\nlog.Println(pq.Pop()) // 9\nlog.Println(pq.Pop()) // 7\nlog.Println(pq.Pop()) // 0\n```\n\n### Trie\n\n```golang\ntrie := datt.NewTrie()\n\ntrie.Insert(\"car\")\ntrie.Insert(\"cartridge\")\ntrie.Insert(\"plane\")\ntrie.Insert(\"planer\")\n\nca := trie.AutoComplete(\"ca\")\nlog.Println(ca) // [r, rtridge]\n\np := trie.AutoComplete(\"p\")\nlog.Println(p) // [lane, laner]\n\ndoc := trie.AutoComplete(\"doc\")\nlog.Println(doc) // []\n```\n\n### Binary Heap\n\n```golang\nbheap := datt.NewBinaryHeap(datt.CompareOrdered[float64])\n\nbheap.Push(36.6)\nbheap.Push(-14.687)\nbheap.Push(0.1415)\nbheap.Push(99.95)\n\nlog.Println(bheap.PeekFront()) // 99.95\nlog.Println(bheap.PeekBack())  // -14.687\n\nlog.Println(bheap.Pop()) // 99.95\nlog.Println(bheap.Pop()) // 36.6\nlog.Println(bheap.Pop()) // 0.1415\n```\n\n### Generational Arena\n\n```golang\narena := datt.NewArena[string]()\n\nhenry := arena.Create(\"henry data\")\nmarie := arena.Create(\"marie data\")\n\nhenryValue, _ := arena.Get(henry) // error if wrong key\nlog.Println(henryValue) // henry data\n\narena.Remove(marie)\narena.Remove(marie) // fail cannot delete twice\n```\n\n### Tuple\n \n ```golang\ntuple := datt.Tuple[int, string]{\n\tFirst:  36,\n\tSecond: \"Henry\",\n}\nlog.Println(tuple.First)  // 36\nlog.Println(tuple.Second) // Henry\n\n// there is also\n// datt.Triple\n// datt.Quadruple\n```\n\n### In Progess\n\n- Weight Graph\n- Ordered Array\n- Add iterate to missing struct\n- Add tables showing O(N) best - average - worst","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraphadam%2Fdatt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraphadam%2Fdatt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraphadam%2Fdatt/lists"}