数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
堆的定义n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为堆。情形1:ki 2i 且ki 2i+1 (最小化堆或小顶堆)情形2:ki >= k2i 且ki >= k2i+1 (最大化堆或大顶堆)其中i=1,2,…,n/2向下取整;                       若将和此序列对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二叉树,
暑假,小哼准备去一些城市旅游。有些城市之间有公路,有些城市之间则没有,如下图。为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程。        上图中有4个城市8条公路,公路上的数字表示这条公路的长短。请注意这些公路是单向的。我们现在需要求任意两个城市之间的最短路程,也就是求任意两个点之间的最短路径。这个问题这也被称为“多源最短路径”问题。        现在需要一个
1. 跳表介绍 在之前关于数据结构的博客中已经介绍过两种最基础的数据结构:基于连续内存空间的向量(线性表)和基于链式节点结构的链表。 有序的向量可以通过二分查找以logn对数复杂度完成随机查找,但由于
栈 栈模型 栈(stack)是限制对元素的插入(push)和删除(pop)只能在一个位置上进行的表,该位置是表的末端,叫做栈的栈顶(top)。 栈的基本操作只有两种,压入栈(push)和弹出栈顶(po
什么是单链表 在了解单链表之前,你知道什么是链表吗?如果你不知道什么是链表,可以看看我的这篇博客<链表-LinkList> 单链表是链表的其中一种基本结构。一个最简单的结点
什么是顺序表 顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。 在使用顺序表存储数据前,会先申请一段连续的内存空间(即数组),然后把数组依次存入
什么是双向循环链表 在了解双向循环链表之前,如果对链表还没有一个清晰的概念,建议你看看 "单链表" 和 "单向循环链表" ,这有利于你更好的理解下面的内容。(废
什么是链表 维基百科:链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必须按顺序存
键树的基本概念 键树又称数字查找树(Digital Search Tree)。 它是一棵度大于等于2的树,树中的每个结点中不是包含一个或几个关键字,而是只含有组成关键字的符号。 例如,若关键字是数值,
[TOC] 基本概念 数据: 数据 是对客观事物的符号表示,在计算机科学中指所有能输入到计算机中并被计算机程序处理的符号的总称。数据的含义很广泛,如图像、声音等都可以通过编码而归之为数据的范畴。 数据
[TOC] 反证法 基本概念: 一般地,假设原命题不成立(即 在原命题的条件下,结论不成立),经过正确的推理,最后得出矛盾,因此说明假设错误,从而证明原命题成立,这样的证明方法叫做 反证法 。 基本操
最近抽空整理了"数据结构和算法"的相关文章。在整理过程中,对于每种数据结构和算法分别给出"C"、"C++"和"Java"
[TOC] 矩阵在计算机图形学、工程计算中占有举足轻重的地位。在数据结构中考虑的是如何用最小的内存空间来存储同样的一组数据。所以,我们不研究矩阵及其运算等,而把精力放在如何将矩阵更有效地存储在内存中,
[TOC] 大O表示法:算法的时间复杂度通常用大O符号表述,定义为T[n] = O(f(n))。称函数T(n)以f(n)为界或者称T(n)受限于f(n)。 如果一个问题的规模是n,解这一问题的某一算法
1.当中断发生时,cpu立即进入核心态 2.当中断发生后,当前进程进入暂停状态,操作系统内核对中断进行处理 3.对于不同的中断信号,会进行不同的处理 有了中断,才能实现程序的并发运行,cpu从用户态转
一张图保存一下 红点是当前地址 白色箭头是新打开页面 黑色箭头是后退页面 栈的思想 , 后退就是栈的索引往下移动 , 前进就是往上移动 , 点击新页面就是当前索引位置往上的所有元素都删除 , 然后再插
开放寻址法:又称开放定址法,当哈希冲突发生时,从发生冲突的那个单元起,按照一定的次序,从哈希表中寻找一个空闲的单元,然后把发生冲突的元素存入到该单元。这个空闲单元又称为开放单元或者空白单元。开放寻址法
@ 树的基本概念 图1 树的结点 结点:使用树结构存储的每一个数据元素都被称为“结点”。例如,上图1中,数据元素 1 就是一个结点; 父结点(双亲结点)、子结点和兄弟结点:对于上图1中的结点 1,2,
1.准备工作 首先包含头文件,定义链表结构体,产生随即链表的范围,定义全局头尾节点。 #include <stdio.h> #include <stdlib.
上节介绍了链表的基本操作史上最全单链表的增删改查反转等操作汇总以及5种排序算法(C语言) 这节介绍链表的5种排序算法。 @ 0.稳定排序和原地排序的定义 稳定排序: 假定在待排序的记录序列中,存在多个
查找表的概念 查找表是由同一类型的数据元素构成的集合。例如电话号码簿和字典都可以看作是一张查找表。 在查找表中只做查找操作,而不改动表中数据元素,称此类查找表为静态查找表;反之,在查找表中做查找操作的
线索二叉树的概念 当我们对普通的二叉树进行遍历时需要使用栈结构做重复性的操作。线索二叉树不需要如此,在遍历的同时,使用二叉树中空闲的内存空间记录某些结点的前趋和后继元素的位置(不是全部)。这样在算法后
先序遍历 先序遍历规则 先序遍历的核心思想:1.访问根节点;2.访问当前节点的左子树;3.若当前节点无左子树,则访问当前节点的右子树;即考察到一个节点后,即刻输出该节点的值,并继续遍历其左右子树。(根
在介绍矩阵的压缩存储前,我们需要明确一个概念:对于特殊矩阵,比如对称矩阵,稀疏矩阵,上(下)三角矩阵,在数据结构中相同的数据元素只存储一个。 三元组顺序表 稀疏矩阵由于其自身的稀疏特性,通过压缩可以大
前段时间看到了同学转发的中兴通讯的比赛链接,之前也没有参加过算法类的比赛,这次打算报着试一试的态度参加下,增加下经验。在初步看了几个门派的题目简介后,发现只有傅里叶派比较适合自己,所以最终选择了傅里叶
如下图所示,这是一棵普通的树,该如何存储呢?通常,存储具有普通树结构数据的方法有 3 种: 双亲表示法; 孩子表示法; 孩子兄弟表示法; 图1 树的双亲表示法 双亲表示法采用顺序表(也就是数组)存储普
uthash简介 由于C语言本身不存在哈希,但是当需要使用哈希表的时候自己构建哈希会异常复杂。因此,我们可以调用开源的第三方头文件,这只是一个头文件:uthash.h。我们需要做的就是将头文件复制到您
在数据结构中,字符串要单独用一种存储结构来存储,称为串存储结构。这里的串指的就是字符串。无论学习哪种编程语言,操作最多的总是字符串。我们平常使用最多的存储结构无疑是利用定长数组存储。但是这种存储结构需
逻辑结构是指数据元素之间的逻辑关系,即从逻辑关系上描述数据,独立于计算机存在。·逻辑结构分为以下四种: 1、线性结构 数据元素之间只存在一对一的关系 2、集合结构 数据元素之间除了“同属一个
所谓“就地是指辅助空间复杂度为O(1)。 解法一:将头结点摘下,然后从第一结点开始,依次前插入到头结点的后面(头插法),直到最后一个结点为止。 代码如下 解法二: 通过若干操作将指针反转达到逆置的目的