- 博客(10)
- 收藏
- 关注
原创 数据结构与算法第四讲-[队列]
#队列 ###什么是队列 先进者先出,就是**“队列”** 我们可以想象成,排队买票,先来的先买,后来的只能在末尾,不允许插队。 队列的两个基本操作:入队 将一个数据放到队列尾部;出队 从队列的头部取出一个元素。队列也是一种操作受限的线性表数据结构 它具有先进先出的特性,支持队尾插入元素,在队头删除元素。 队列的概念很好理解,队列的应用也非常广泛如:循环队列、阻塞队列、并发队列、优先级队列等 ###顺序对列 ###循环对列 • 当rearfront0的时候表示对列为空 • c1 c2 c3相继入对 (
2021-03-08 14:18:26 221
原创 数据结构与算法第三讲-[双向链表]
#双向链表 单向链表相对数组来说已经有很多优点了,但是,它还有一个最大的弊端,那就是在某种程度上和深度优先遍历有通性.一条路走到黑,从不回头!这种特性在进行数据操作时,会大大浪费时间,鉴于此,出现了双向链表的概念。 顾名思义,双向链表就是具备两个方向的指向,无非就是每个结点成了两个指针。 每次在插入或删除某个节点时, 需要处理四个节点的引用, 而不是两个. 也就是实现起来要困难一些 . 一个节点既有向前连接的引用, 也有一个向后连接的引用. 创建结点 //定义结点 typedef struct Node.
2021-03-08 14:17:54 252
原创 数据结构与算法第二讲-[单向循环链表]
单向循环链表 单向循环链表: 单链表的最后一个节点的指针指向链表头部,而不是指向NULL,那么就构成了一个单向循环链表,通俗讲就是把尾节点的下一跳指向头结点。 //定义节点 typedef struct Node{ ElemType data ; struct Node *next; }Node; typedef Node *LinkList; • 初始化 循环链表的创建分为两种情况: 1.链表第一次创建: 创建一个新的结点 新结点的next指向自身(*L)->next = (*L.
2021-03-08 14:17:08 486 1
原创 数据结构与算法[线索化二叉树]
在二叉树的结点上加上线索的二叉树称为线索二叉树,对二叉树以某种遍历方式(如先序、中序、后序或层次等)进行遍历,使其变为线索二叉树的过程称为对二叉树进行线索化。 ##概念 对于n个结点的二叉树,在二叉链存储结构中有n+1个空链域,利用这些空链域存放在某种遍历次序下该结点的前驱结点和后继结点的指针,这些指针称为线索,加上线索的二叉树称为线索二叉树。 这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中
2021-03-08 14:16:37 381
原创 数据结构与算法[图结构初探]
##图的简介 图(Graph)结构是一种非线性的数据结构,图在实际生活中有很多例子,比如交通运输网,地铁网络,社交网络,计算机中的状态执行(自动机)等等都可以抽象成图结构。图结构比树结构复杂的非线性结构 ##图的构成 图(Graph) 是由顶点的有穷⾮非空集合 和 顶点之间边的集合组成. 通常表示为: G(V,E). 其中,G表示⼀一个图, V是图G中的顶点集合,E 是图G中边的集合. 图结构中顶点集合V(G)不能为空,必须包含一个顶点,而图结构边集合可以为空,表示没有边. ##图的基本概念 1.无向图
2021-03-08 14:15:07 429
原创 数据结构与算法[二叉树基础]
前言 树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。一直以来,对于树的掌握都是模棱两可的状态,现在希望通过写一个关于二叉树的专题系列。 1重点名词 1.1 结点 结点是数据结构中的基础,是构成复杂数据结构的基本组成单位。 1.2 数结点 本系列文章中提及的结点专指树的结点。例如:结点A在图中表示为: #2 数 ###2.1 定义 **树(Tree)**是n(n>=0)个结点的有限集。n=0时称为空树。在任意一颗非空树中: 1)有且仅有一个特定的称为根(Root)的结点; 2)当n>1
2021-03-08 14:12:28 1360
原创 数据结构[堆]
堆是具有下⾯面性质的完全⼆二叉树: 每个结点的值都⼤大于或等于其左右孩⼦子结点的值, 称为⼤大顶堆;如图1; 或者每个结点的值都⼩小于等于其左右孩⼦子的结点的值,称为⼩小顶堆, 如图 ##堆排序(Heap Sort) 原理理探索 堆排序思路路: 将⽆无需序列列构建成⼀一个堆,根据升序降序需求选择⼤大顶堆或⼩小顶堆 将堆顶元素与末尾元素交换,将最⼤大元素”沉"到数组末端; 重新调整结构,使其满⾜足堆定义,然后继续交换堆顶元素与当前末尾元素,反复 执⾏行行调整+交换步骤,直到整个序列列有序; ###堆排序
2021-03-08 14:11:50 99
原创 数据结构——哈夫曼(Huffman)树+哈夫曼编码
哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。 ##哈夫曼的思考 想要找到一个成绩所处的等级,都需要从60开始判断, 成绩⽐比重: 在70~89分之间占⽤用了了70% 但是都是需要经过3次判断才能得到正 确的结果. 那么如果数量量集⾮非常⼤大时,这样的⽐比较
2021-03-08 14:11:16 1025
原创 去除重复字母(LeetCode-困难)
demo 给你一个仅包含小写字母的字符串,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的***字典序最小(要求不能打乱其他字符的相对位置)*** 示例1: 输入:“bcabc” 输出:“abc” 示例2: 输入:“cbacdcbc” 输出:“acdb” ###解题关键: 字典序: 字符串之间比较和数字比较不一样; 字符串比较是从头往后挨个字符比较,那个字符串大取决于两个字符串中第一个对应不相等的字符; 例如 任意一个a开头的字符串都大于任意一个b开头的字符串;例如字典中apple 大于
2021-03-08 14:10:44 408 1
原创 几种常见的排序
##排序 假设含有n个记录的序列列为(r1,r2,…,rn). 其相应的关键字分别为{k1,k2,…,kn}. 需确定 1,2,…,n 的⼀一种排序p1,p2,…pn. 使其相应的关键字满⾜足kp1 <= kp2 <= … <= kpn ⾮非递减(或 ⾮非递增)关系. 即使得到序列列成为⼀一个按关键字有序的序列列(rp1,rp2,…,rpn).这样得出操作称为排 序 ###排序的分类 内排序:是在排序整个过程中,待排序的所有记录全部被放置在内存中; 外排序:由于排序的记录个数太多,不不能同
2021-03-08 14:09:13 202
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人