数据结构与算法
文章平均质量分 94
数据结构与算法的笔记
DantinZhang
学习只是一种习惯
展开
-
Leetcode(一):数组、链表部分经典题目详解(JavaScript版)
提前声明:本博客内容均为笔者为了方便个人理解而发布,题目思路参考自代码随想录,如果大家有觉得写的不清晰的地方,欢迎在评论区提问。原创 2023-08-01 14:13:37 · 646 阅读 · 0 评论 -
数据结构(六):冒泡排序、选择排序、插入排序、快速排序
我先自己写了一遍,我发现我写的这个其实是有问题的,内层循环控制两个元素依次比较,外层循环控制比较的趟数。来举例,外层循环控制趟数,那么4个数比较3趟,依次递减(j=3第一趟,j=2第二趟,j=1第三趟),每一趟中都要两两比较,从下标为0开始,依次比较。对于N个数据项,比较次数为:(N - 1) + (N - 2) + (N - 3) + …次(j=3第一趟比较3次,j=2第二趟比较2次,j=1第三趟比较1次)。总结:4个数要比较三趟,第一趟比较3次,第二趟比较2次,第三趟比较1次。原创 2023-02-24 16:12:46 · 660 阅读 · 0 评论 -
数据结构(五):红黑树、图
一组顶点:通常用 V (Vertex)表示顶点的集合;一组边:通常用 E (Edge)表示边的集合;边是顶点和顶点之间的连线;边可以是有向的,也可以是无向的。比如A----B表示无向,A —> B 表示有向;js实现图结构。原创 2023-02-23 09:45:22 · 268 阅读 · 0 评论 -
数据结构(四):树、二叉树、二叉搜索树
如果树中的每一个节点最多只能由两个子节点,这样的树就称为二叉树;二叉树的特性:1、 一个二叉树的第 i 层的最大节点树为:2(i-1),i >= 1;2、 深度为k的二叉树的最大节点总数为:2k - 1 ,k >= 1;3、对任何非空二叉树,若 n0 表示叶子节点的个数,n2表示度为2的非叶子节点个数,那么两者满足关系:n0 = n2 +1;如上图所示:H,E,I,J,G为叶子节点,总数为5;A,B,C,F为度为2的非叶子节点,总数为4;满足n0 = n2 + 1的规律。原创 2023-02-21 21:54:34 · 663 阅读 · 0 评论 -
数据结构(三):集合、字典、哈希表
哈希表是基于数组实现的,但是相对于数组和链表来说,它的查找效率更高,因为它通常会对插入元素的下标值进行变换。这种变换称为哈希函数,通过哈希函数获取hashCode,并通过取余操作获取元素在数组中的下标。哈希表的一些概念:1、哈希化:将大数字转化成数组范围内下标的过程,称之为哈希化;2、哈希函数:我们通常会将单词转化成大数字,把大数字进行哈希化的代码实现放在一个函数中,该函数就称为哈希函数;3、哈希表:对最终数据插入的数组进行整个结构的封装,得到的就是哈希表。原创 2023-02-14 21:17:01 · 900 阅读 · 0 评论 -
数据结构(二):单向链表、双向链表
链表和数组一样,可以用于存储一系列的元素,但是链表和数组的实现机制完全不同。链表的每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(有的语言称为指针或连接)组成。类似于火车头,一节车厢载着乘客(数据),通过节点连接另一节车厢。head属性指向链表的第一个节点;链表中的最后一个节点指向null;当链表中一个节点也没有的时候,head直接指向null;双向链表:既可以从头遍历到尾,又可以从尾遍历到头。原创 2023-02-11 22:21:42 · 2014 阅读 · 1 评论 -
数据结构(一):数组、栈、队列、优先级队列
的用法,splice(1,1,‘Tom’):表示从索引为1的元素开始删除(包括索引为1的元素),共删除1个元素,并添加元素’Tom’。击鼓传花规则:围成一圈数数,比如规定数到5的人淘汰,那么淘汰的人后面的人从1开始数,然后数到5的人再淘汰,以此类推,直到剩下最后一个人,求该人的位置。插入元素’Tom‘(也可以理解为从索引为1的元素开始删除,删除0个元素,再在索引为1的元素前面添加元素’Tom’);(2)不为空,就要遍历当前队列元素,插入的新值依次比较,如果新值优先级较低,那么就使用。利用队列实现击鼓传花。原创 2023-02-07 19:11:02 · 709 阅读 · 0 评论