算法与数据结构
文章平均质量分 78
基础的算法和数据结构,到智能计算截止
孤影墨客
这个作者很懒,什么都没留下…
展开
-
数据结构基本概念
从具体问题中抽象出数学模型设计一个解决这个模型的算法编写程序,进行测试、调整得到最终结果寻求数学模型的实质是分析问题,从中提取操作的对象,并找出这些对象之间的关系,然后用数学语言加以描述。数据结构三要素:逻辑结构、存储结构、数据运算算法:是对特定问题求解步骤的描述。原创 2022-10-17 21:00:00 · 334 阅读 · 0 评论 -
数据结构之线性结构-串
串定义串是由零个或多个字符组成的有限序列基本操作StrAssign(&T,chars):赋值操作。把串T赋值为chars。StrCopy(&T,S):复制操作。由串S复制得到串T。StrEmpty(S):判空操作。若S为空串,则返回TRUE,否则返回FALSE。StrLength(S):求串长。返回串S的元素个数。ClearString(&S):清空操作。将S清为空串。DestroyString(&S):销毁串。将串S销毁(回收存储空间)。Concat(&T,S1,S2):串联接。用T原创 2021-07-09 11:21:17 · 422 阅读 · 2 评论 -
数据结构之线性结构-队列
先进先出==队列(Queue)==是只允许在一端进行插入在另一端进行删除操作的线性表。队首是允许删除的一端。队尾是允许插入的一端。空队是不含任何元素的队列。基本操作InitQueue(&Q):初始化队列,构造一个空队列Q。DestroyQueue(&Q):销毁队列。销毁并释放队列Q所占用的内存空间。EnQueue(&Q,x):入队,若队列Q未满,将x加入, 使之成为新的队尾。DeQueue(&Q,&x):出队,若队列Q非空,删除队头元素,并用x返回。GetHead(Q,原创 2021-07-07 10:21:26 · 373 阅读 · 0 评论 -
数据结构之线性结构-栈
栈基本定义先进后出==栈(Stack)==是只允许在一端进行插入和删除操作的线性表。栈顶是允许进行插入、删除操作的那一端。栈底是固定的,不允许进行插入、删除操作的那一端。空栈是不含任何元素的栈。n个不同元素进栈,出栈元素不同排列的个数为\frac{1}{n+1}C_{n}^{2n} n+11 C n2n 。上述公式称为卡特兰(Catalan) 数,可采用数拿归纳法证明。基本操作InitStack(&S):初始化栈。构造-一个空栈S,分配内存空间。Dest原创 2021-07-07 10:19:48 · 247 阅读 · 0 评论 -
数据结构之线性结构-链表
文章目录链表单链表双链表循环链表链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的原创 2021-06-27 21:31:03 · 493 阅读 · 0 评论 -
数据结构之线性结构-顺序表
前言基础概念基本操作顺序表前言基础概念线性表是最简单的一种数据结构,是具有相同数据类型的n(n>=0)个数据元素的有限序列。n为表长,当n=0是为空表。线性表L:L=\{x_1,x_2,···,x_n\}L={x 1 ,x 2 ,⋅⋅⋅,x n }L=\{x_i| x_i \in ElemSet, i=1,2,3,···,n,n\geq0\}L={x i ∣x i ∈ElemSet,i=1,2,3,⋅⋅⋅,n,n≥0}线性结构特点:在数据元素原创 2021-06-26 20:47:27 · 445 阅读 · 2 评论 -
JavaScript数据结构与算法总结
文章目录前言线性结构数组增删改多维数组(矩阵)链表栈队列非线性结构集合字典和散列表字典散列表树二叉树平衡树图排序查找分治算法回溯算法贪心算法其它JavaScript基础知识JavaScript数据结构与算法总结一——线性结构(数组、链表、栈、队列)JavaScript数据结构与算法总结JavaScript可以直接写入 HTML 输出流,也可以直接使用node.js。<!DOCTYPE html><html lang="en"><head> <m原创 2021-05-20 08:13:02 · 279 阅读 · 0 评论 -
JavaScript数据结构与算法总结五——排序和查找(冒泡排序 选择排序 插入排序 快速排序 堆排序 顺序查找 二分查找 插值查找)
排序冒泡排序冒泡排序比较所有相邻的两个项,如果第一个比第二个大,则交换它们。元素项向上移动至正确的顺序,就好像气泡升至表面一样,冒泡排序因此得名。//一维数组冒泡排序,从大到小 let testArray = [77, 41, 31, 43, 11, 33, 21]; for (let i = 0; i < testArray.length - 1; i++) { for (let j = 0; j < testArray.lengt原创 2021-05-17 19:05:24 · 174 阅读 · 1 评论 -
JavaScript数据结构与算法总结四——图(深度优先、广度优先、最短路径、最小生成树)
图由边的集合及顶点的集合组成。图的表示图的遍历深度优先搜索广度优先搜索最短路径Dijkstra 算法Floyd-Warshall 算法最小生成树Prim 算法Kruskal 算法原创 2021-05-17 15:14:50 · 328 阅读 · 1 评论 -
JavaScript数据结构与算法总结三——树(二叉搜索树、平衡树:AVL树&红黑树)
文章目录树二叉树平衡树AVL树红黑树树二叉树树,它对于存储需要快速查找的数据非常有用。树是一种分层数据的抽象模型。中的每个元素都叫作节点,节点分为内部节点和外部节点。位于树顶部的节点叫作根节点,它没有父节点。树至少有一个子节点的节点称为内部节点。没有子元素的节点称为外部节点或叶节点。二叉搜索树(BST)是二叉树的一种,但是只允许你在左侧节点存储(比父节点)小的值,在右侧节点存储(比父节点)大的值。有三种遍历 BST 的方式:中序、先序和后序。中序遍历按照节点上的键值,以升序访问 BST 上的所有原创 2021-05-17 10:12:01 · 208 阅读 · 1 评论 -
JavaScript数据结构与算法总结二——非线性结构(集合、字典和散列表)
非线性结构集合字典和散列表字典散列表集合是由一组无序且唯一(即不能重复)的项组成的。交集,并集,补集,子集在字典中,存储的是[键,值]对,其中键名是用来查询特定元素的。散列函数的选择依赖于键值的数据类型。如果键是整型,最简单的散列函数就是以数组的长度对键取余。为了避免碰撞,首先要确保散列表中用来存储数据的数组其大小是个质数。这一点很关 键,这和计算散列值时使用的取余运算有关。数组的长度应该在 100 以上,这是为了让数 据在散列表中分布得更加均匀。原创 2021-05-17 09:30:50 · 296 阅读 · 1 评论 -
JavaScript数据结构与算法总结一——线性结构(数组、链表、栈、队列)
数组Array类方法多维数组(矩阵)链表栈队列原创 2021-05-17 09:21:49 · 203 阅读 · 0 评论