
数据结构(笔记)
文章平均质量分 71
课堂以及考试重点都会塞进去。
find it %%
i
展开
-
线索二叉树
线索二叉树考的不多目录基础代码增设头结点并线索化的代码实现中序遍历已经线索化的二叉树手工部分的话不难,我这里放大佬博客了图解线索二叉树_八百万的博客-优快云博客_后序线索二叉树画法图解很快就能理解并写出线索二叉树的手工题直接上基础代码#define OK 1#define ERROR 0#define OVERFLOW -1typedef int Status;typedef char TElemTy.转载 2021-12-30 18:53:16 · 156 阅读 · 0 评论 -
数据结构集合
这个章节没听课很迷集合的基本概念:1.集合的成员必须互不相同,成员一般是无序的,没有先后次序的关系2.表示方法:{1,2,3,4,5,6,7,8,9,10}集合的存储结构有两种:顺序存储与链式存储顺序...原创 2021-12-12 23:07:03 · 553 阅读 · 0 评论 -
排序算法汇总(手工题+思想+算法代码)
根据教学大纲排序分三种存储结构顺序存储结构,链式存储结构,索引存储结构数据结构与算法系列--十大排序(附动态图解) - 知乎 (zhihu.com)目录一、直接插入排序二、折半插入排序(手工题)三、希尔排序(手工题)四、直接选择排序五、堆排序(大顶堆)六、冒泡排序七、快速排序(每年必考)八、二路归并(归并排序手工题)九、桶排序十、基数排序总结一、直接插入排序思想:当插入第i (i >=1) 个对象时, 前面的V[0...原创 2021-12-08 22:42:45 · 629 阅读 · 0 评论 -
数据结构期中考试典例分析
这次考试检验出很多问题,同时也很低分,,,迷茫了半个月,现在爬回来补内容目录一、哈夫曼编码手工计算题二、堆的手工题三、二叉树遍历算法题四、双端队列插入删除算法题五、链表算法题一、哈夫曼编码手工计算题1、下面的数据表给出了在一篇有19710个词的英文词文中出现最普遍的确15个词的出现频度1)假设一个英文字符等价于log26=4.7010bits,那么这些词按bits计的平均长度是多少?2)假定一篇正文仅由上述数据表中的词组成,那么它们的最佳哈夫曼编码是什么...原创 2021-12-08 11:42:20 · 828 阅读 · 0 评论 -
拓扑排序(图)
拓扑排序原理(本质是图):用顶点表示活动的网络 (AOV网络)计划、施工过程、生产流程、程序流程等都是“工程”。除了很小的工程外,一般都把工程分为若干 个叫做“活动”的子工程。完成了这些活动,这个工程就可以完成了。例如,计算机专业学生的学习就是一个工程,每一 门课程的学习就是整个工程的一些活动。其中有些 课程要求先修课程,有些则不要求。这样在有的课 程之间有领先关系,有的课程可以并行地学习。可以用有向图表示一个工程。在这种有向图 中,用顶点表示活动,用有向边表示<Vi ,Vj&g.原创 2021-11-06 11:13:06 · 1001 阅读 · 0 评论 -
图---->最小生成树 ( minimum cost spanning tree )
使用不同的遍历图的方法,可以得到不同的生成树;从不同的顶点出发,也可能得到不同的生成树。按照生成树的定义,n 个顶点的连通网络的生成树有 n 个顶点、n-1条边。构造最小生成树 假设有一个网络,用以表示 n 个城市之间架设通信线路,边上的权值代表架设通信线路的成本。如何架设才能使线路架设的成本达到最小?经过算法优化后得到这个树所以,这种问题的解决方法通俗的有两种:普里姆(prim)算法克鲁斯卡尔(Kruskal)算法我们首先来入手Kruskal算法K...原创 2021-11-05 20:55:05 · 465 阅读 · 0 评论 -
图的遍历(递归+非递归)
图遍历一共有四种,邻接矩阵的BFS与DFS,邻接表的BFS与DFS还有BFS(BFS没有递归!)与DFS递归与非递归;DFS手工DFS 在访问图中某一起始顶点 v 后, 由 v 出发, 访问它的任一邻接顶点 w1; 再从 w1 出发, 访问与 w1邻 接但还没有访问过的顶点 w2; 然后再从 w2 出发, 进行类似的访问, … 如此进行下去, 直至到达所有的邻接顶点都被访问过的顶点 u 为止。接着, 退回一步, 退到前一次刚访问过的顶点, 看是否还有其它没有被访问的邻...原创 2021-11-04 19:07:58 · 1400 阅读 · 0 评论 -
图的最短路径(dijkstra算法)
洛谷有题P3371 【模板】单源最短路径(弱化版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)P4779 【模板】单源最短路径(标准版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)先放大佬的ac代码(请看第一篇题解,写的很不错!)P4779 【模板】单源最短路径(标准版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)Floyd算法是求任意两点的最短路径(5条消息) 《算法笔记》—— 图 "最短路径" 之 Floyd-W.原创 2021-11-04 09:55:07 · 371 阅读 · 0 评论 -
图的建立(邻接矩阵与邻接表)
图的基本概念可以翻书目录图的模板基类邻接矩阵邻接矩阵的具体类实现邻接矩阵构造函数实现(基于这个构造函数可以初始化一个邻接矩阵)图的第二种存储方法———邻接表邻接表建立算法!图的存储一般来说有四种,但是由于考试还有本人是鶸,所以就只讨论邻接矩阵与邻接表图的模板基类const int maxWeight = ……; //无穷大的值(=)const int DefaultVertices = 30; //最大顶点数(=n)template &l.原创 2021-11-03 21:09:06 · 1718 阅读 · 0 评论 -
堆(树形结构应用)
堆其实就是由完全二叉树组成的,堆(heap)堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆的性质:1.堆中某个节点的值总是不大于或不小于其父节点的值。2.堆总是一棵完全二叉树。堆的分类将根节点最大的堆叫做最大堆或大顶堆,根节点最小的堆叫做最小堆或小顶堆。常见的堆有二叉堆、斐波那契堆等。堆的定义如下:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。(ki <= k2i,ki <= k2i+1)原创 2021-10-26 22:26:14 · 404 阅读 · 0 评论 -
哈夫曼树建立与二叉树WPL算法以及相关例题
哈夫曼树的建立有两种方式,一种是通过静态数组的方式来建立(这种方式比较简洁明了好理解),由于不想篇幅太长了,我还是po出一篇大佬的优秀文章来解释建立哈夫曼树吧哈夫曼树静态数组形式建立哈夫曼树的基本概念及创建(c/c++)_gets_s的博客-优快云博客一、一些基本概念1、路径:从树中一个结点到另一个结点之间的分支构成这两个结点之间的路径。2、路径长度:路径上的分支数目称作路径长度。3、树的路径长度:从树根到每一结点的路径长度之和。4、权:赋予某个实体的一个量,是对实体的某个或某些属性的数值化描述。原创 2021-10-24 16:43:21 · 7747 阅读 · 0 评论 -
树、森林的遍历与互转二叉树
要了解二叉树与树,森林的互转,首先要知道树的存储结构:一个合理的想法是在结点中存放指向每一个子女结点的指针。但由于各个结点的子女数不同,每个结点设置数目不等的指针,将很难管理。所以就有了子女-兄弟表示(也称为树的二叉树表示。结点构造为):firstChild 指向该结点的第一个子女结点。无序树时,可任意指定一个结点为第一个子女。nextSibling 指向该结点的下一个兄弟。任一结点在存储时总是有顺序的。若想找某结点的所有子女,可先找firstChild,...原创 2021-10-24 14:42:12 · 211 阅读 · 0 评论 -
二叉树(递归应用+建树)
由上一个部分可知二叉树基础,现在看看二叉树的一些应用;原创 2021-10-21 09:52:30 · 613 阅读 · 0 评论 -
二叉树基础(遍历)
在整个二叉树当中,最重要的是遍历(遍历的应用)、建树(前中后序层次建树)、搜索首先是定义二叉树struct BinTreeNode{ T data; BinTreeNode<T> *leftChild,*rightChild; BinTreeNode():leftChild(NULL),rightChild(NULL){} BinTreeNode(T x,BinTreeNode<T> *l=NULL,BinTreeNode<T>原创 2021-10-17 19:09:58 · 239 阅读 · 0 评论 -
双端队列(顺序表)
直接转载队列的应用:双端队列 - xfgnongmin - 博客园转载 2021-10-05 17:32:27 · 351 阅读 · 0 评论 -
队列(链表实现)
链式队列在进队时无队满问题,但有队空问题。队空条件为 front == NULL目录队列抽象数据类型(模板)建立链式队列(声明)清空队列进队出队队列抽象数据类型(模板)template <class E>class Queue {public: Queue() { }; //构造函数 ~Queue() { }; //析构函数 virtual bool EnQueue(E x) = 0; ...原创 2021-10-05 15:55:59 · 709 阅读 · 0 评论 -
队列代码实现(顺序队列)
队列是先进先出(FIFO, First In First Out)队列是只允许在一端删除,在另一端插入的线性表允许删除的一端叫做队头(front),允许插入的一端叫做队尾(rear)。队列抽象数据类型(模板)template <class E>class Queue {public: Queue() { }; //构造函数 ~Queue() { }; //析构函数 virtual bool EnQueue(E x)原创 2021-10-05 15:30:20 · 582 阅读 · 0 评论 -
栈的实现(顺序表实现)
顺序栈实现太简单了,直接看代码吧导向链接:栈的建立【包括入栈出栈显示】(基于单链表实现)_inbSorryMaker的博客-优快云博客//基本栈的结构template <class E> //模板class Stack { //栈的类定义public: Stack(){ }; //构造函数 virtual void Push(E x) = 0; //进栈 virtual bool Pop...原创 2021-10-02 22:14:19 · 188 阅读 · 0 评论 -
栈的建立【包括入栈出栈显示】(基于单链表实现)
一般来说,c++有专门的STL,可以直接调用接口。怕自己忘记,我还是po出来了C++标准库(STL)栈(stack)、队列(queue)、双向队列(deque)、容器(vector)的基本操作_云帆之路Tony的博客-优快云博客上面那个博客很赞很简洁,上面这些也不用刻意记,因为用多了自然熟。。。现在我们看看通过单链表建立栈的操作(如有问题请指正!)目录建立链式栈(声明)清空栈入栈出栈(删除栈顶元素)取栈顶元素(不删除栈顶元素)输出栈所有元素(递归)//基本栈原创 2021-10-02 21:59:55 · 648 阅读 · 0 评论 -
顺序表(vector)------实现(模板类)
向量(Vector):是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。下方链接也能进行通俗易懂的接受C++ vector 容器浅析 | 菜鸟教程目录自定义模板类的vector列表初始化与复制构造析构,输出容量大小和表元素数目重载" [ ] "使列表像数组一样判断非空非满插入删除操作扩容和缩容操作重载" =="..转载 2021-09-26 11:22:10 · 236 阅读 · 0 评论 -
递归的理解(数据结构)
在数据结构中,很多内容都应用到递归,递归在数据结构中至关重要递归定义:一个函数、概念或数学结构,如果在其定义或说明内部直接或间接地出现对其本身的引用,或者是为了描述问题的某一状态,必须要用至它的上一状态,而描述上一状态,又必须用到它的上一状态……这种用自己来定义自己的方法,称之为递归或递归定义。在程序设计中,函数直接或间接调用自己,就被称为递归调用。递归的几个特点1.递归式,就是如何将原问题划分成子问题。2.递归出口,递归终止的条件,即最小子问题的求解,可以允许多个出口。3.界函数,问题转载 2021-09-26 10:26:07 · 2502 阅读 · 0 评论 -
数据结构-------链表(递归)操作
数据结构中的链表估计很多人会觉得简单,我也是怕记不住所以就尝试整理一下笔记吧1.创建链表(初始化) struct ListNode { //链表结点类 int data; //数据域,当然int类型可以改为自定义类型T等等 ListNode * next; //主要讨论单链表 }; typedef ListNod原创 2021-09-23 22:40:45 · 3446 阅读 · 2 评论