## 简介
#### 此项目是基于java语言的关于数据结构的代码实现,包含所有经典数据结构算法,并且注释完善,非常适合了解和学习数据结构。另外包含了一个联系人存储工具(phonebook),它由swing展示,并应用了数据结构算法的相关概念。如果对你有帮助,就关注一下吧^O^
## 结构
* array--数组和广义表
* graph--图
* list--线性表
* phonebook--综合应用(利用数据结构实现联系人存储软件)
* search--查找
* sort--排序
* stackqueue--栈和队列
* string--串
* tree--树
* leetcode_agorithm leetcode算法示例题解
## 数据机构
### 线性表
线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储),但是把最后一个数据元素的尾指针指向了哨位结点)。
![Alt text](/res/list.png?raw=true "list")
* **SeqList** 用数组实现的一种单链表,时间复杂度如下:
* 索引: `O(1)`
* 搜索: `O(n)`
* 插入: `O(n)`
* 移除: `O(n)`
![Alt text](/res/arraylist.jpg?raw=true "SeqList")
* **SinglyLinkedList** 带头结点的单链表,它是由节点(Node)组成的线性集合,每个节点可以利用指针指向其他节点。时间复杂度如下:
* 索引: `O(n)`
* 搜索: `O(n)`
* 插入: `O(1)`
* 移除: `O(1)`
![Alt text](/res/linkedlist.jpg?raw=true "SinglyLinkedList")
* **SortedSinglyLinkedList** 一种可排序的单链表,它要求加入的元素必须实现Comparable接口
* **PolySLinkedList** 一种可排序并且可与其他链表相加的一种数据结构,它实现了Addible接口
### 栈与队列
栈是一种先进后出的一种元素集合,其中push为入栈,pop为出栈。
队列是一种先进先出的一种元素集合,其中enqueue为入队,dequeue为出队
![Alt text](/res/stackqueue.png?raw=true "stackqueue")
* **SeqQueue** 使用数组实现一种队列结构,时间复杂度如下:
* enqueue: `O(1)`
* dequeue: `O(1)`
* **LinkedQueue** 使用链表实现的一种队列结构
![Alt text](/res/stack_queue.png?raw=true "stackqueue")
* **PriorityQueue** 优先级队列,优先级高的元素最先出队
* **SeqStack** 使用数组实现的一种栈结构
* push: `O(1)`
* pop: `O(1)`
* **LinkedStack** 使用链表实现的一种栈结构
### 串
串(string)是由零个或多个宇符组成的有限序列,又名叫字符串。
* **MyString** 模拟字符串结构
* **MyStringBuffer** 模拟可变字符串结构
### 数组和广义表
数组是一个由一组类型相同、下标不同的变量构成的数据结构,广义表元素的值非原子类型,可以再分解,表中元素也可是一个线性表,所有数据元素仍然属于同一数据类型。
* **GenList** 双链结构的广义表
* **DownTriangleMatrix** 线性压缩存储的下三角矩阵
* **CrossLinkedSparseMatrix** 十字链表存储的系数矩阵
* **LinkedSparseMatrix** 三元组行的单链表存储的系数矩阵
* **Matrix** 用数组进行的存储的一种矩阵结构
* **SeqSparseMatrix** 稀疏矩阵三元组顺序表存储的一种矩阵结构
### 树
树状图是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的
* **Tree** 树形结构,每个节点包含孩子结点和兄弟结点
* **BinaryTree** 二叉树,每个节点包含左孩子结点和右孩子及结点
![Alt text](/res/binarytree.jpg?raw=true "Hashing")
* **CompleteBinaryTree** 完全二叉树,除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点。
> 满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树。
![Alt text](/res/complete.jpg?raw=true "Hashing")
* **ThreadBinaryTree** 中序线索二叉树,按照中序遍历,每个节点的左孩子为空,则指向它的前驱结点,右孩子为空,则指向它的后继结点
### 图
图是一种数据元素间为多对多关系的数据结构
* 无向图(Undirected Graph): 无向图具有对称的邻接矩阵,因此如果存在某条从节点 u 到节点 v 的边,反之从 v 到 u 的边也存在。
* 有向图(Directed Graph): 有向图的邻接矩阵是非对称的,即如果存在从 u 到 v 的边并不意味着一定存在从 v 到 u 的边。
![Alt text](/res/graph.png?raw=true "Hashing")
* **AdjMatrixGraph** 邻接矩阵表示的带权图数据机构
* **AdjListGraph** 邻接表表示的带权图数据结构
![Alt text](/res/MatrixListGraph.jpg?raw=true "Hashing")
### 排序
#### **插入排序**
* 直接插入排序(稳定)
![Alt text](/res/insertsort1.jpg?raw=true "Hashing")
* 希尔排序(不稳定)
![Alt text](/res/insertsort2.jpg?raw=true "Hashing")
#### **交换排序**
* 冒泡排序(稳定)
![Alt text](/res/bubblesort.jpg?raw=true "Hashing")
* 快速排序(不稳定) 时间复杂度如下:
* 最优时间: O(nlog(n))
* 最坏时间: O(n^2)
* 平均时间: O(nlog(n))
![Alt text](/res/quicksort.jpg?raw=true "Hashing")
#### **选择排序**
* 直接选择排序(不稳定)
![Alt text](/res/selectsort.jpg?raw=true "Hashing")
* 堆排序(不稳定) 利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。 时间复杂度如下:
* 最优时间: O(nlog(n))
* 最坏时间: O(nlog(n))
* 平均时间: O(nlog(n))
![Alt text](/res/heapsort.jpg?raw=true "Hashing")
* 归并排序(稳定) 归并排序是利用一种分治的思想,它不断地将某个数组分为两个部分,分别对左子数组与右子数组进行排序,然后将两个数组合并为新的有序数组。时间复杂度如下:
* 最优时间: O(nlog(n))
* 最坏时间: O(nlog(n))
* 平均时间: O(nlog(n))
![Alt text](/res/mergesort.png?raw=true "Hashing")
### 查找
* **BinarySortTree** 二叉排序树,一种特殊的二叉树,对于每一个结点,它的左孩子下所有的结点数值一定比它的右孩子下所有结点的数值小,构造过程如下:
![Alt text](/res/binarysort.jpg?raw=true "Hashing")
* **HashSet** 采用链地址法的散列表数据结构,内部使用了SinglyLinkedList数组存储元素
![Alt text](/res/hash.jpg?raw=true "Hashing")
> 关于哈希: 一般的线性表,树中,记录在结构中的相对位置是随机的,因此,在结构中查找记录时需进行一系列和关键字的比较。 理想的情况是能直接找到需要的记录,因此必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使每个关键字和结构中一个唯一的存储位置相对应。
> 解决冲突:
> * 链接法(拉链法)。将具有同一散列地址的记录存储在一条线性链表中。例,除留余数法中,设关键字为 (18,14,01,68,27,55,79),除数为13。散列地址为 (5,1,1,3,1,3,1),
> * 开地址法 在开地址法中,当插入新值时,会判断该值对应的哈希桶是否存在,如果存在则根据某种算法依次选择下一个可能的位置,直到找到一个尚未被占用的地址�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
数据结构学习资料分享 内容概览: 本次分享包涵了大学计算机相关专业必学的“数据结构”课程的一系列学习资料。主要包括: 算法代码:我们提供了多种数据结构的实现代码,包括数组、链表、栈、队列、树、图等。这些代码不仅能帮助你理解数据结构的基本概念,而且能让你明白如何在实际情况中应用这些数据结构。 笔记:详细且系统的笔记,涵盖了数据结构的各个方面,从基础概念到复杂的数据结构如堆、B树等。这些笔记有助于你系统地复习和学习数据结构。 相关书籍推荐:为了更深入地理解数据结构,我们推荐了几本经典的教材和参考书籍。这些书籍将帮助你建立完整的数据结构知识体系。 适用人群: 这份学习资料适用于所有大学计算机相关专业的学生,无论你是初学者还是已经有一定的数据结构基础。同时,对于对数据结构感兴趣的非专业人士,这份资料也是一个很好的起点。 使用建议: 结合理论和实践:在学习的过程中,请结合算法代码和理论知识。尝试自己编写代码实现数据结构,并在遇到问题时参考提供的代码。 由浅入深:建议先从基础的数据结构开始学习,如数组和链表,然后再学习更复杂的数据结构如树和图。 多做练习:数据结构是实践性很强的学科。通过多做练习,你可以更好地理解数据结构的基本概念和原理,并提高编程能力。
资源推荐
资源详情
资源评论
收起资源包目录
基于java语言的数据结构及算法实现,LeetCode算法示例.zip (252个子文件)
friends.dat 159B
stack.gif 6KB
.gitignore 22B
PhoneBookJFrame.java 10KB
BinaryTree.java 7KB
AbstractGraph.java 6KB
ArraySort.java 5KB
CrossLinkedSparseMatrix.java 5KB
MyString.java 5KB
ThreadBinaryTree.java 5KB
SinglyLinkedList.java 5KB
AdjMatrixGraph.java 4KB
AdjListGraph.java 4KB
TriBinaryTree.java 4KB
LinkedSparseMatrix.java 4KB
SeqSparseMatrix.java 4KB
q004_MedianOfTwoSortedArrays.java 4KB
q126_WordLadder2.java 4KB
q023_MergeKSortedLists.java 3KB
SeqList.java 3KB
q054_SpiralMatrix.java 3KB
q057_InsertInteval.java 3KB
q039_CombinationSum.java 3KB
q127_WordLadder.java 3KB
MyStringBuffer.java 3KB
SortedSinglyLinkedList.java 3KB
Expresstion.java 3KB
Tree.java 3KB
q068_TextJustification.java 3KB
q133_CloneGraph.java 3KB
q025_ReverseNodesInKGroup.java 3KB
q103_BinaryTreeZigzagLevelOrderTraversal.java 3KB
BinarySortTree.java 3KB
q052_NQueens2.java 3KB
q032_LoggestValidParentheses.java 3KB
q107_BinaryTreeLevelOrderTraversal2.java 3KB
q006_ZigZagConversion.java 3KB
q099_RecoverBinarySearchTree.java 3KB
q098_ValidateBinarySearchTree.java 3KB
q072_EditDistance.java 3KB
q082_RemoveDuplicatesFromSortedList2.java 2KB
q003_LoggestSubstringWithoutRepeatingCharacters.java 2KB
q102_BinaryTreeLevelOrderTraversal.java 2KB
q097_InterleavingString.java 2KB
q008_StringToInteger.java 2KB
q051_NQueens.java 2KB
q037_SudokuSolver.java 2KB
GenList.java 2KB
q087_ScrambeString.java 2KB
PhoneBookTreeSet.java 2KB
q130_SurroundedRegions.java 2KB
q093_RestoreIPAddresses.java 2KB
q117_PopulatingNextRightPointersInEachNode2.java 2KB
q021_MergeTwoSortedList.java 2KB
q101_SymmetricTree.java 2KB
q096_UniqueBinarySearchTrees.java 2KB
q001_TwoSum.java 2KB
KeyWords.java 2KB
q081_SearchInRotatedSortedArray2.java 2KB
q034_SearchForARange.java 2KB
q116_PopulatingNextRightPointersInEachNode.java 2KB
q083_RemoveDuplicatesFromSortedList.java 2KB
TermX.java 2KB
q010_RegularExpressionMatching.java 2KB
q079_WordSearch.java 2KB
q005_LoggestPalindromicSubstring.java 2KB
q035_SearchInsertPosition.java 2KB
q044_WildcardMatching.java 2KB
q019_RemoveNthNodeFromEndOfList.java 2KB
q030_SubstringWithConcatenationOfAllWords.java 2KB
q128_LongestConsecutiveSequence.java 2KB
q085_MaximalRectangle.java 2KB
Polynomial.java 2KB
q086_PartitionList.java 2KB
HuffmanTree.java 2KB
q104_MaximumDepthOfBinaryTree.java 2KB
q106_ConstructBinaryTreeFromInorderAndPostorder.java 2KB
q063_UniquePaths2.java 2KB
DownTriangleMatrix.java 2KB
q018_FourSum.java 2KB
q095_UniqueBinarySearchTrees2.java 2KB
q022_GenerateParentheses.java 2KB
q036_ValidSudoku.java 2KB
SeqQueue.java 2KB
Number.java 2KB
q073_SetMatrixZeroes.java 2KB
q002_AddTwoNumbers.java 2KB
q040_CombinationSum2.java 2KB
q092_ReverseLinkedList2.java 2KB
q015_ThreeSum.java 2KB
q056_MergeIntevals.java 2KB
q131_PalindromePatitioning.java 2KB
q062_UniquePaths.java 2KB
q065_ValidNumber.java 2KB
q061_RotateList.java 2KB
q084_LargestRectangleInHistogram.java 2KB
HashCharWeight.java 2KB
q105_ConstructBinaryTreeFromPreorderAndInorder.java 2KB
q033_SearchInRotatedSortedArray.java 2KB
Tree_String.java 2KB
共 252 条
- 1
- 2
- 3
资源评论
01红C
- 粉丝: 1896
- 资源: 2040
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于java开发的蓝牙防丢报警器,可设置报警距离+源码(毕业设计&课程设计&项目开发)
- 基于java开发的日志报警处理+源码+项目文档+使用说明(毕业设计&课程设计&项目开发)
- 工业数字化转型的关键技术及其应用场景解析
- 支付宝小程序开发指南:从入门到实践全面解析
- 基于java开发的通用报警框架,支持报警方式自定义,报警配置自定义+源码+项目文档+使用说明(毕业设计&课程设计&项目开发)
- ADS131E08中文数据手册
- chapter04.rar
- E036社会网络UNINET软件及操作教程.zip
- .archivetemp爱心飘零.zip
- 全面构建与维护云服务器ECS的安全防护体系:阿里云ECS安全实践与应用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功