
数据结构
文章平均质量分 73
Whynotwu
源于生活,而高于生活。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
桶排序
package sorts;public class BucketSort { /** * 桶排序 * * @param arr 数组 * @param bucketSize 桶容量 */ public static void bucketSort(int[] arr, int bucketSize) { if (arr.length < 2) { return; } .原创 2021-03-07 23:01:55 · 158 阅读 · 0 评论 -
栈(为什么栈功能少,限制多,但还这么受欢迎?)
什么是栈?那就是后进者先出,先进者后出。为什么栈结构受限制,功能少,还这么受欢迎?从栈的操作特性上来看,栈是一种“操作受限”的线性表,只允许在一端插入和删除数据。我第一次接触这种数据结构的时候,就对它存在的意义产生了很大的疑惑。因为我觉得,相比数组和链表,栈带给我的只有限制,并没有任何优势。那我直接使用数组或者链表不就好了吗?为什么还要用这个“操作受限”的“栈”呢?事实上,从功能上来说,数组或链表确实可以替代栈,但你要知道,特定的数据结构是对特定场景的抽象,而且,数组或链表暴露了太多原创 2021-03-05 21:41:34 · 683 阅读 · 1 评论 -
链表(快速写代码)
链表的代码写起来是不是很费劲?想要写好链表代码并不是容易的事儿,尤其是那些复杂的链表操作,比如链表反转、有序链表合并等,写的时候非常容易出错。技巧一:理解指针或引用的含义指针的定义:将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指针,或者反过来说,指针中存储了这个变量的内存地址,指向了这个变量,通过指针就能找到这个变量。p->next=q。这行代码是说,p 结点中的 next 指针存储了 q 结点的内存地址,也就是p指向q链表。p->next=p->next-&原创 2021-03-04 22:31:55 · 276 阅读 · 1 评论 -
链表(快速懂原理)
什么是链表?链表是通过指针将一组零散的内存块串联在一起。其中,我们把内存块称为链表的“结点”。为了将所有的结点串起来,每个链表的结点除了存储数据之外,还需要记录链上的下一个结点的地址。链表与数组的区别数组需要一块连续的内存空间来存储,对内存的要求比较高。如果我们申请一个 100MB 大小的数组,当内存中没有连续的、足够大的存储空间时,即便内存的剩余总可用空间大于 100MB,仍然会申请失败。而链表恰恰相反,它并不需要一块连续的内存空间,它通过“指针”将一组零散的内存块串联起来使用,所以如果我原创 2021-03-04 21:20:30 · 2128 阅读 · 1 评论 -
数组
什么是数组?数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。1、线性表(Linear List)。线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。如图所示:非线性表,比如二叉树、堆、图等。之所以叫非线性,是因为,在非线性表中,数据之间并不是简单的前后关系。2、连续的内存空间和相同类型的数据正是因为这两个限制,它才有了一个堪称“杀手锏”的特性:“随机访问”原创 2021-03-03 18:50:57 · 3271 阅读 · 1 评论 -
复杂度分析(下)最好、最坏、平均、均摊时间复杂度分析
1.最好、最坏、平均情况时间复杂度有时候我们分析一段代码的时间复杂度时,并不能很直观的就得出结果,需要结合具体的场合来判断它的平均情况。下面来看一个栗子: /** * 找出给定数组中给定元素的位置,如果找不到返回-1 * @param arr 给定数组 * @param target 给定元素 * @return */ public int find(int[] arr, int ...原创 2021-03-03 15:42:13 · 311 阅读 · 1 评论 -
复杂度分析(上)时间复杂度、空间复杂度
为什么要有复杂度分析? 为了肉眼、实时、快速地来分析出代码的复杂度,我们需要一个不用具体的测试数据来测试,就可以粗略地估计算法的执行效率的方法。 大O复杂度表示法 时间复杂度+空间复杂度 时间复杂度 表示算法的执行时间与数据规模之间的增长关系。每行代码对应的 CPU 执行的个数、执行的时间都不一样,但是,我们这里只是粗略估计,所以可以假设每行代码执行的时间都一样,为 unit_time。以上代码则为(2n+2)*unit_time 所以,整段代码总的执行时间 T(n)..原创 2021-03-02 23:03:16 · 533 阅读 · 0 评论 -
顺序栈(C++语言)
用C++语言编写顺序栈功能:随机输入一个整数以及一个想要转换的进制数,然后再通过出栈输出新的进制数。实践结果:实现过程:1、入栈:就是一个简单的往数组添加元素的过程template <typename Type>void stack<Type>::push(Type x){ if(isFull()) return; top++; ele[top] =...原创 2019-11-06 00:15:13 · 875 阅读 · 0 评论 -
用C++编写单链表
单链表的实现核心思想:1.创建一个作为结点的类:ListNode2.创建一个带有对链表操作的各项功能的类:OneList结点类的功能:1.创建一个结点,用来存放一个值和一个指针。功能类的功能:1.清空链表 void MakeEmpty();2.查询数据,返回该数据的结点位置 int Find(Type item);3.结点插入 bool Insert(Type item, int...原创 2019-10-28 22:48:31 · 627 阅读 · 0 评论 -
用C++编写线性表
数据结构:用C++编写顺序表数据结构实验心得用c++语言编写一段程序,以实现顺序表的功能:元素的插入、删除、追加。实验心得:本次的实验让我对于顺序表有了更深的理解,顺序表是通过数据元素物理存储的连续性。来反应元素之间逻辑上的相邻关系。采用顺序存储结构存储的线性表。元素的追加只需要在尾部处增加一个地址,顺序表的长度增大一,把值赋给该地址。元素的插入稍微复杂一点,要先判断插入的位置...原创 2019-10-27 22:33:09 · 2980 阅读 · 3 评论