{"id":21353406,"url":"https://github.com/githubofrico/datastructure","last_synced_at":"2025-04-05T20:05:51.334Z","repository":{"id":41377425,"uuid":"91214763","full_name":"githubofrico/DataStructure","owner":"githubofrico","description":"常用数据结构及其算法的Java实现，包括但不仅限于链表、栈，队列，树，堆，图等经典数据结构及其他经典基础算法(如排序等)...","archived":false,"fork":false,"pushed_at":"2018-02-17T04:16:37.000Z","size":53,"stargazers_count":456,"open_issues_count":6,"forks_count":181,"subscribers_count":19,"default_branch":"master","last_synced_at":"2025-03-29T19:02:11.233Z","etag":null,"topics":["algorithms","datastructures","list","queue","sort","stack","tree"],"latest_commit_sha":null,"homepage":"","language":"Java","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/githubofrico.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}},"created_at":"2017-05-14T02:26:29.000Z","updated_at":"2025-03-23T13:45:48.000Z","dependencies_parsed_at":"2022-08-25T11:40:45.912Z","dependency_job_id":null,"html_url":"https://github.com/githubofrico/DataStructure","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/githubofrico%2FDataStructure","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/githubofrico%2FDataStructure/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/githubofrico%2FDataStructure/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/githubofrico%2FDataStructure/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/githubofrico","download_url":"https://codeload.github.com/githubofrico/DataStructure/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247393568,"owners_count":20931812,"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":["algorithms","datastructures","list","queue","sort","stack","tree"],"created_at":"2024-11-22T03:17:30.077Z","updated_at":"2025-04-05T20:05:51.303Z","avatar_url":"https://github.com/githubofrico.png","language":"Java","readme":"\n# 常用数据结构及其算法的Java实现\n\n本项目主要使用Java实现各种经典常用数据结构及其算法，包括但不仅限于链表、栈，队列，树，图等经典数据结构，持续更新中...\n\n目前，该项目具体包括如下内容：\n\n - 单向链表的数据结构及其相关算法：单向链表结构包含两个要素，即头结点head和链表大小size，具体操作包括：\n\n    - 链表的增删\n    - 链表是否为空\n    - 链表的大小\n    - 链表的打印输出\n    - 删除链表重复节点\n    - 链表倒数第K个元素\n    - 链表的反转\n    - 链表的倒序输出\n    - 链表的中间节点\n    - 链表是否有环\n    - 链表节点的删除(不知道头结点的情况下)\n    - 链表是否相交\n    - 链表的交点\n \n ---------------\n \n - 栈(顺序栈/链式栈)的数据结构及其相关算法：栈结构包含两个要素，即栈顶指针top和栈大小size，具体操作包括：\n\n    - 压栈操作push\n    - 弹栈操作pop\n    - 查看栈顶元素peek\n    - 查看栈的大小  \n    - 查看栈是否为空\n    - 查看栈的最小元素(O(1)时间复杂度)\n \n ---------------\n \n - 队列(基于数组的实现、基于链表的实现和基于栈的实现)的数据结构及其相关算法：队列结构包含三个要素，即队头指针head、队尾指针rear和队列大小size，具体操作包括：\n\n    - 入队操作put\n    - 出队操作pop\n    - 查看队头元素peek\n    - 查看队列的大小  \n    - 查看队列是否为空\n \n----------\n\n - 二叉树(链式实现)的数据结构及其相关算法：二叉树结构包含一个要素，即二叉树的根结点，具体操作包括：\n\n    - 以广义表形式的字符串构建二叉树：'()'前表示根结点，括号中左右子树用逗号隔开，逗号不能省略\n    - 二叉树的层次/广序遍历算法(辅助队列)\n    - 二叉树的前序、中序、后序遍历的递归/非递归算法（辅助栈）:对每个节点而言，三种遍历方式都需要遍历该结点三次，三者唯一区别在于该结点的访问时机；特别注意后序遍历的迭代算法的实现\n    - 根据二叉树的前序、中序或中序、后序遍历结果构建二叉树\n    - 根据二叉树的根结点复制一颗二叉树\n    - 二叉树的高度\n    - 二叉树的结点总数\n    - 二叉树的根结点、孩子节点的获取\n    - 以广义表的形式打印二叉树\n    - 判断两颗二叉树是否相等  \n\n----------\n\n - 堆(数组实现)的数据结构及其相关算法：堆结构实际上是一个完全二叉树，能方便地从中取出最小/大元素，其包含两个要素，即存储数组heap[]和堆大小size。本实现为最小堆，具体操作包括：\n\n    - 堆的构建(创建一个空堆，基于数组的构建)\n    - 堆的插入(插入到堆尾，再自下向上调整为最小堆)\n    - 堆的删除(删除堆顶元素并用堆尾元素添补，再自上向下调整为最小堆)\n    - 堆排序(时间复杂度：O(nlgn),空间复杂度O(1),不稳定)：升序排序一般用最大堆，不断地将堆顶元素放到数组最后并缩小堆的范围\n    - 堆的打印(树的前序遍历的应用)\n\n----------\n\n - 二叉搜索树的数据结构及其相关算法：二叉搜索树也叫二叉排序树，其中序遍历及时序列的升序排序。此外，二叉搜索树能方便地从中搜索出指定元素，具体操作包括：\n \n    - 二叉搜索树的构建(基于数组的构建(插入构建))\n    - 二叉搜索树的插入(插入到合适位置，插入后仍然是一颗二叉搜索树)，递归算法\n    - 二叉搜索树的删除(分为删除节点为叶子节点、左子树为空、右子树为空、左右子树均不为空等四个方面，递归算法，删除后仍然是一颗二叉搜索树)\n    - 二叉搜索树的搜索，O(lgn)，递归算法\n    - 二叉搜索树的遍历，特别是中序遍历(遍历结果为升序序列)，递归算法\n    - 二叉搜索树的打印(树的前序遍历的应用)，递归算法\n\n----------\n\n - 八大排序算法及其实现，具体包括直接插入排序，希尔排序，直接选择排序，堆排序，冒泡排序，快速排序，归并排序，基数排序在内的八种排序算法，同时对各种算法的基本特征做出了详细分析：\n\n    - 算法基本思想\n    - 算法的种类：插入排序(直接插入排序，希尔排序，折半插入排序)，选择排序(直接选择排序，堆排序(升序/最大堆))，交换排序(冒泡排序，快速排序)，归并排序，分配排序(基数排序)\n    - 算法的时间复杂度\n    - 算法的空间复杂度\n    - 算法的稳定性\n    - 内部排序/外部排序\n\n----------\n \n\u003cfont color='red'\u003e\u003cb\u003e注意:\u003c/b\u003e\u003c/font\u003e\n\n - 堆排序的源码在堆的相关实现中给出\n - 源码中每个包对应一个数据结构及其算法的实现。若项目中的源代码存在谬误，请不吝指出，在此拜谢！\n\n\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgithubofrico%2Fdatastructure","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgithubofrico%2Fdatastructure","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgithubofrico%2Fdatastructure/lists"}