![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构整理
文章平均质量分 63
TimeVshow
个人博客http://allmight.xyz,欢迎关注~
展开
-
数据结构整理 ——线性表
# **线性表**##1.线性表是什么线性表是最常用且最简单的一种数据结构。简而言之,一个线性表是n个数据元素的有序序列。个人理解,可以看做是我们平时经常用的数组。##2.线性表的实现方式线性表的实现方式参照《数据结构》(严蔚敏,吴伟民编著版本)有两种:顺序和链式。##3.顺序线性表的优点跟我们平常使用数组...原创 2018-12-01 00:13:35 · 130 阅读 · 0 评论 -
拓扑排序总结
拓扑排序总结1.前言拓扑排序主要的作用是可以用来判断,当前图中是否含有环。其主要的实现思想是,从图中的入度为零的点开始,如果找到,就将这个点从图中删去,并更新与这个点相连的其他点的入度信息,直到全部的点都被删去,或者图中没有入度为零的点,如果是后一种情况,那么证明图中含有环。2.实现代码的实现具体如下#include <stack>using namespace std;...原创 2019-01-02 12:37:23 · 382 阅读 · 0 评论 -
二叉树的遍历总结
二叉树的遍历总结1. 前言总结了总结关于二叉树的遍历问题包括递归的和非递归的形式。后序遍历的非递归算法真的是。。。有关树的节点的定义如下typedef struct node{ int data; struct node* lchild; struct node* rchild;}node,*pnode;2.递归形式递归形式的二叉树遍历算法相对而言,就很简单,只需要把相应的...原创 2018-12-31 15:22:26 · 1476 阅读 · 0 评论 -
归并排序算法小结
归并排序1.算法描述归并排序的思想,在之前我们也都已经遇到过了,就是将一个完整的无序的序列,变成两个无序的序列,同时对左右两个无序序列进行排序,最终,对两个序列进行合并,最后我们可以就可以得到一个有序的序列。分别对左右两边进行排序的话,我们可以采用递归的算法。关键的问题在于如何进行合并。2.算法实现&&描述#include <stdio.h>void merg...原创 2018-12-29 09:06:34 · 165 阅读 · 0 评论 -
快速排序总结
快速排序1.前言快排基于的是冒泡排序改进的一种算法。冒泡排序的时间复杂度为O(n2),而快排的时间复杂度为O(nlgn),有了极大的改进。2. 原理将原来的一整个序列切割成两半,找到一个中间值,不断在左边的序列里寻找比标记值更大的元素,在右边的序列中寻找比标记元素更小的元素。即将大的元素向后移,小的元素向前移。3.代码&&比较3.1 冒泡排序for (int i = ...原创 2018-12-24 08:49:57 · 208 阅读 · 0 评论 -
堆排序算法小结
堆排序算法小结1.前言堆排序算法基于的思想是基于选择排序的算法,是在树形选择排序基础上的排序算法的改进版本。2.堆排序堆排序的实现,是构造一棵二叉树,使得二叉树中的每一个节点的值都要小于(大于)其左右节点的值。分别成为小顶堆,大顶堆。构造完成后,我们每次取二叉树的根节点,并从头开始改变原来数组中的值,那么我们最终可以得到一个有序的序列。那么难点在于如何去构造一棵这样的二叉树。我们先从最靠近...原创 2018-12-27 09:04:20 · 492 阅读 · 0 评论 -
查找章节总结之二——次优查找树
查找章节总结之二-静态次优查找树1.前言在上一篇博客中介绍了,查找章节较为简单的基础部分的东西,同时在计算平均查找长度的时候,我们假定每个点的查找的概率均为相同的,但是实际上,每个点查找的概率可能会出现不相同的情况,再按照前面的方法计算可能效果不是太好.例如我们假设一个有序列表各个查找概率分别为p1=0.1,p2=0.2,p3=0.1,p4=0.4,p5=0.2,那么按照我们之前求出的折半查找...原创 2018-12-16 13:57:57 · 339 阅读 · 0 评论 -
数据结构查找章节总结之一
查找章节总结之一1.前言花了一上午的时间来从头开始学习查找,来总结下自己所学到的一点点东西。2.关于静态查找表就是很简单的数组的线性查找,需要从头开始一个个去找(即为遍历)那么这种查找方法的平均查找长度在查找概率相同的情况下为ASSs=1n∑i=1n(n−i+1)ASS_s=\frac{1}{n}\sum_{i=1}^n(n-i+1)ASSs=n1i=1∑n(n−i+1)AS...原创 2018-12-16 12:28:48 · 348 阅读 · 0 评论 -
最小生成树算法总结
最小生成树算法总结1前言最小生成树的定义,[最小生成树][https://baike.baidu.com/item/最小生成树/5223845].书上总共给出了两种算法,一种为prim算法,一种为Kruscal算法,两种算法的时间复杂度在堆优化的情况下,各为O(elge)和O(eLgv)其中e为图的边数,v为图的顶点数。2.prim算法prim算法的主要思想是,先随意选择一个点作为起始点,...原创 2018-12-20 16:24:45 · 232 阅读 · 0 评论 -
数据结构总结之三——动态查找表
数据结构总结之三—动态查找表1.前言提到动态的话,就要想到链表了,所以这一次主要是总结,在链表上如何实现查找。2.二叉排序树2.1什么是二叉排序树若树的左子树不为空,那么左子树上所有节点的值均小它的根节点的值。若他的右子树不为空,那么右子树上所有节点的值,均大于他的根节点的值。这个定义,感觉上其实是跟堆基本上没有差别,可以学完二叉排序树之后再去学下堆。2.2二叉排序树中的查找pnod...原创 2018-12-20 14:01:04 · 732 阅读 · 0 评论 -
KMP浅显理解
KMP算法解释1.好的博客从头到尾彻底理解KMP算法,这是我在搜索各种博客之后,解释的最为详尽的一篇关于介绍KMP算法的一篇博客。自己的理解也算是建立在这篇博客上。很早很早之前就已经学过了,不过还是忘了好多。现在再拾起来按照自己的理解疏解一遍。2.KMP缘何而起目标问题,给你一个文本串S,文本串T求出S中与T相匹配的第一个位置。我们有朴素的算法是:int j=1;int i=1;i...原创 2018-12-05 19:44:55 · 113 阅读 · 0 评论 -
数据结构整理——线性链表
#线性表的链式表示和实现##1.线性表的链式表示总共有三种方式1.线性链表2.双向链表3.循环链表###1.1不同实现形式的优点####一、线性链表就是相当普通的链表,就不做过多的介绍。相较于数组,其存储不强调连续性,其存储的物理位置不要求紧邻。(因此不可以用上一个节点+1来表示下一节点 曾经看了好久的一个bug)有一个小技巧是你可以将这个链表的表头置为空,在在头节点之前...原创 2018-12-01 00:14:58 · 190 阅读 · 0 评论 -
给定数组,求出数组每个数左边比该数小的数的个数
给定数组,求出数组每个数左边比该数小的数的个数1.问题描述 给定一个数组num,数组长度为n,求出数组中每个数左边比该数小的数的个数2.做法是一道比较典型的线段树的题目.具体做法是我们以数组中最小的数low和最大的数high为线段树根节点的两个端点,建立线段树,线段树所有节点的权值初始为空.接着在线段树中依次查询数组中的数x,找到相应的位置.找到后,权值+1,并向上改变父节点的权值,...原创 2019-06-18 17:44:17 · 2875 阅读 · 0 评论