
数据结构
具有某种关系的一组数据的集合。
数据结构就是描述数据之间的关系,关系决定了数据被处理的特点。数据结构分为逻辑结构和存储结构
吴成伟0122
开源爱好者,聚焦于大语言模型,NLP等领域,欢迎交流
展开
-
一文读懂java容器之HashMap
HashMap:java.util.HashMap,Map实现的子类,也是映射容器的一种,而Map是映射容器的顶层接口。映射:指的就是键值对儿数据。比如像字符集,每一个字符都对应着一个整数,但是任意一个整数,不一定对应着一个字符。...原创 2019-12-04 22:23:57 · 201 阅读 · 0 评论 -
一文读懂数据结构之哈希表
哈希表的数据结构:数组+n个链表java.util.HashMap(哈希表的具体实现类)原创 2019-12-02 22:34:16 · 608 阅读 · 0 评论 -
一文读懂数据结构之队列
队列:java.util.LinkedList(实现了双端队列的功能)单端队列:元素一端进入,两外一端出去。元素特点:先入先出。双端队列:两素可以两端进入,两端取出。如果双端队列的一头被堵上了,就是栈。...原创 2019-12-02 22:29:35 · 446 阅读 · 0 评论 -
一文读懂数据结构之树
树:要么是空树,及没有任何元素的树要么必须包含有根节点root子节点:child节点下面和他直接相连的节点。父节点:parent节点上面和他直接相连的节点。任何一个节点最多只能有一个父节点。(只有根节点没有父节点)叶子节点:leaf没有子节点的节点。兄弟节点:拥有相同父节点的节点。子树:以某一个子节点为根节点的树。二叉树:最多只有两个子节点的树平衡二叉树:左子树和右子树的...原创 2019-12-02 22:22:52 · 586 阅读 · 0 评论 -
一文读懂数据结构之双向链表
双向链表:每一个节点中包含了三部分数据1、数据本身2、指向下一个节点的引用 next3、指向前一个节点的引用 prev(前两点就是单向链表)下一个节点也叫后继节点。前一个结点:前驱节点。双向链表中也支持有2个结点的引用头节点:first尾节点:last可以实现双向的遍历:1、从头到尾:不断的next2、从尾到头:不断的prev优点和缺点和单向链表一样。(单向链表)...原创 2019-12-02 22:09:49 · 383 阅读 · 0 评论 -
一文读懂数据结构之单向链表
单向链表:元素之间是一个线性的关系,每一个元素都是有序的(连续的)。链表中的数据、元素:称为节点:Node。链表中的第一个节点:头节点 first、head单向链表中的一个元素包含了两部分数据:1、任何一个节点的有效的数据2、指向下一个节点的引用。Node类型。最后一个节点称为:尾部节点、tail、last链表中只持有头结点和尾部节点的引用。添加节点:添加头结点:1、创建一个新...原创 2019-12-02 21:59:41 · 570 阅读 · 0 评论 -
一文读懂数据结构之顺序查找
小结下目前的查找算法和排序算法。查找算法:1、顺序查找:遍历元素,逐个和要查找的key比较2、二分查找:先排序,然后通过中间数来缩小查找范围。排序算法:1、冒泡排序:相邻元素挨个比,大的放到后边,有点顺序查找的感觉。(遍历)2、选择排序:从无序区中直接选择一个最小的元素(这个过程就是有点像冒泡,把最小的数冒出来)和无序区的第一个元素交换位置。3、插入排序:将无序区的第一个元素,插入到...原创 2019-12-01 17:56:26 · 429 阅读 · 0 评论 -
一文读懂数据结构之冒泡排序
冒泡排序BubbleSort的原理冒牌排序的基本实现:让相连的两个元素一次比较。只要左面的元素大于右面的元素,那么两个元素进行互换位置。总的趟数:长度-1每一趟中:对无序区中的元素进行两个元素的比较和互换。实现代码:public static void bubbleSort(int[] arr) { if (arr == null) return...原创 2019-11-30 22:21:54 · 243 阅读 · 0 评论 -
一文读懂数据结构之插入排序
直接插入排序:核心思想:将无序区的第一个元素,插入到有序区中合适的位置。选择排序是:将无序区中选择一个最小的元素和无序区的第一个元素互换位置。总趟数:长度-1外层循环控制趟数内层循环:控制本趟的比较和移动元素。比较:用有序区中的元素和待插入的元素(无序区的第一个元素)进行挨个比较。从后往前比。所有的比待插入元素大的,都要右移一个位置。最后:将待插入的元素放入最后被移走的元素的位置。...原创 2019-11-30 22:08:59 · 132 阅读 · 0 评论 -
一文读懂数据结构之直接选择排序
核心思想:从无序区中选择一个最小的元素和无序区中的第一个元素互换位置。总趟数:长度-1外层循环控制趟数内层循环用于查找本趟最小值的索引。找到最小索引之后和无序区的第一个元素互换。public static void selectSort(int[] arr) { if (arr == null) return; final int...原创 2019-11-30 17:46:16 · 179 阅读 · 0 评论 -
一文读懂数据结构之排序
排序分为稳定排序和不稳定排序。稳定排序:在一个数列中,大小相同的数据,如果在排序过程中,他们前后的位置,不变,就称为稳定排序。内部排序:所有的被排序的数据都被加载到了内存中。外部排序:如果排序的数据量很大,只有内存不足以将所有数据加载,需要借助外部设备,称为外部排序。...原创 2019-11-30 17:14:41 · 611 阅读 · 0 评论 -
一文读懂之数据结构之二分查找(循环递归实现)
二分搜索:折半查找法binarySearch使用二分法的要求:1:被搜索的数列必须是线性有序(序号)的数列。比如数组。2:被搜索的数列必须是升序的(降序)。时间复杂度:T(n) = O(log2n)空间复杂度:S(n) = O(1)实现思想:通过两个变量:low:待搜索区域的最小下标,一开始是0high:带搜索区域的最大下标,一开始是length-1mid:定位到low和hig...原创 2019-11-30 13:00:10 · 295 阅读 · 0 评论 -
一文读懂之数据结构之数组
数组:一种比较简单的数据结构。元素之间的关系:元素都是有序号的,序号是连续的,0序的。数组元素的特点:1、数组元素随机访问的效率很高。(因为是连续的,可以根据索引来快速访问)2、根据内容查找元素的效率不高。3、删除元素和插入元素的效率比较低,需要移动大量的元素。...原创 2019-11-30 12:33:20 · 209 阅读 · 0 评论 -
一文读懂之数据结构之栈(栈底层如何实现扩容,为什么JDK官方不推荐使用Stack)
先来了解一下基本概念:栈stack栈底:第一个存入数据的位置压栈:push,往栈中放入数据出栈、弹栈:pop。从栈中取出数据栈顶指针:类似一个变量、该变量保存的是下一个存入栈中的数据的位置。栈顶指针永远指向代存入数据的栈顶的空白位置。栈一开始是空的,栈顶指针指向栈底。所有的对战的数据操作,都是通过栈顶指针来完成的。压栈的过程:1、将数据存入指针指向的位置。2、将指针上移,继续...原创 2019-11-30 11:43:31 · 759 阅读 · 0 评论 -
一文读懂之数据结构之栈
先来了解一下基本概念:栈stack栈底:第一个存入数据的位置压栈:push,往栈中放入数据出栈、弹栈:pop。从栈中取出数据栈顶指针:类似一个变量、该变量保存的是下一个存入栈中的数据的位置。栈顶指针永远指向代存入数据的栈顶的空白位置。栈一开始是空的,栈顶指针指向栈底。所有的对战的数据操作,都是通过栈顶指针来完成的。压栈的过程:1、将数据存入指针指向的位置。2、将指针上移,继续...原创 2020-02-11 09:35:35 · 428 阅读 · 0 评论 -
一文读懂之递归(递归和循环的区别)
循环public class Test { public static void main(String[] args) { int i; for (i = 1; i <= 5; i++) { System.out.print(i); } }}递归:条件:(1)结束语句(2)递归方法public class AgeTest { public stati...原创 2019-11-14 21:41:30 · 426 阅读 · 0 评论