数据结构
文章平均质量分 62
Joeyos
https://joeyos.github.io
展开
-
数据结构之二叉树
二叉树的性质在二叉树的第iii层上至多有2i−12^{i-1}2i−1个结点(i≥1)(i \geq 1)(i≥1)。深度为kkk的二叉树至多有2k−12^{k}-12k−1个结点(k≥1)(k\geq 1)(k≥1)。对任何一棵二叉树TTT,如果其终端结点数为n0n_0n0,度为222的结点数为n2n_2n2,则n0=n2+1n_0=n_2+1n0=n2+1。具有nnn个结点的...原创 2018-09-23 17:11:28 · 411 阅读 · 0 评论 -
数据结构之算法入门经典
输入输入完毕先按enter,再按ctrl+z,最后按enter,即可结束输入。int x;while(scanf("%d",&x)==1){ //程序}使用文件输入:freopen("inp原创 2018-10-04 14:38:20 · 393 阅读 · 0 评论 -
数据结构之查找
查找就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素。顺序表查找顺序表查找(sequential search)又叫线性查找,是最基本的查找技术,它的查找过程是:从表中第一个记录开始,逐个进行记录的关键字和给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录;如果查到最后一个记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查找不成功。顺序表查...原创 2018-09-26 22:54:31 · 777 阅读 · 0 评论 -
数据结构之C++STL库
使用STL实现迭代器#include<iostream>#include<vector>using namespace std;void print(vector<int> v) { //从向量开头顺次访问 vector<int>::iterator it; for (it = v.begin(); it != v.end(); it...原创 2018-09-26 19:30:37 · 769 阅读 · 0 评论 -
数据结构之串
串的顺序存储串的顺序存储结构是用一组地址连续的存储单元来存储串中的字符序列的。按照预定义的大小,为每个定义的串变量分配一个固定长度的存储区,一般是用定长数组来定义。#include "string.h"#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "ti.原创 2018-09-21 11:17:39 · 222 阅读 · 0 评论 -
数据结构之向量vector
使用STL实现vector向量这里将借助STL的vector(向量)实现动态数组,并用它来管理数据。函数功能复杂度size()返回向量的元素数O(1)push_back(x)在向量尾添加元素xO(1)pop_back()删除向量的最后一个元素O(1)begin()返回指向向量开头的迭代器O(1)end()返回指向向量尾的迭代器O...原创 2018-09-26 16:50:21 · 509 阅读 · 0 评论 -
数组最短路径规划
寻找一条从数组左上角arr[0][0]到右下角arr[m-1][n-1]的路线,使得沿线经过数组的数值之和最小。递归法倒着来分析:最后一步到达arr[m-1][n-1]只有两条路,即通往arr[m-2][n-1]到达或者通往arr[m-1][n-2]到达,最后一步选择的路线为min{f(m-2,n-1),f(m-1,n-2)},同理可递归选择到arr[m-2][n-1]或arr[m-1][...原创 2018-09-26 15:19:00 · 1133 阅读 · 0 评论 -
数据结构之队列
队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表,是一种先进先出的线性表,简称“FIFO”。顺序存储队列入列只需要在队尾加入,时间复杂度为O(1);出列需要移动后面所以的元素,时间复杂度为O(n)。为了避免出列移动所有元素,可以让队头不在下标为0的位置。为了避免当只有一个元素时,队头和队尾重合,所以引入两个指针,front指向队头,rear指向队尾元素的下一个位置,当fro...原创 2018-09-20 15:38:41 · 554 阅读 · 0 评论 -
数据结构之栈
顺序栈栈是一种先进后出的数据结构,是线性表的特例,栈的顺序存储其实也是线性表的=顺序存储的一种简化。#include &quot;stdio.h&quot; #include &quot;stdlib.h&quot; #include &quot;io.h&quot; #include &quot;math.h&quot; #include原创 2018-09-20 14:55:18 · 203 阅读 · 0 评论 -
数据结构之拓扑排序和关键路径
拓扑排序在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,称为AOV网。基本思路:从AOV网中选择一个入度为0的顶点输出,然后删去此顶点,并删除以此顶点为尾的弧,继续重复此步骤,直到输出全部顶点或者AOV网中不存在入度为0的顶点为止。在求最小生成树和最短路径时,我们用的都是邻接矩阵,但由于拓扑排序的过程中,需要删除顶点,显然用邻接表会更加...原创 2018-09-25 22:01:09 · 1687 阅读 · 0 评论 -
数据结构之线性表
线性表顺序存储结构顺序存储结构,在存、读数据时,不管是哪个位置,时间复杂度都是O(1),而插入或删除时,时间复杂度都是O(n)。这说明,它比较适合元素个数不太变化,而更多的是存取数据的应用。#include &amp;quot;stdio.h&amp;quot; #include &amp;quot;stdlib.h&amp;quot; #include &amp;quot;io.h&原创 2018-09-20 11:07:52 · 146 阅读 · 0 评论 -
数据结构之最短路径
对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点是源点,最后一个顶点是终点。迪杰斯特拉(Dijkstra)算法这是一个按路径长度递增的次序产生最短路径的算法。它的思路大体是这样的:并不是一下子就求出v0到v8的最短路径,而是一步步求出它们之间顶点的最短路径,过程中都是基于已经求出的最短路径的基础上,求得更远顶点的最短路径,最终得到你要的结果。...原创 2018-09-25 20:14:51 · 4349 阅读 · 0 评论 -
数据结构之图的最小生成树
我们把构造连通网的最小代价生成树称为最小生成树,找连通网的最小生成树,经典的有两种算法:普里姆算法(Prim)和克鲁斯卡尔算法(Kruskal)。普里姆算法有如下邻接矩阵,9个顶点,左侧数字为行号,INFINITY为极大值65535,MAXVEX为顶点个数最大值,此处大于等于9即可。/* Prim算法生成最小生成树 */void MiniSpanTree_Prim(MGraph G)...原创 2018-09-25 19:07:47 · 283 阅读 · 0 评论 -
数据结构之图的遍历
图的遍历是和树的遍历类似,我们希望从图中某一点出发访问图中其余顶点,且使每一个顶点仅被访问一次,这一过程就叫做图的遍历。深度优先遍历深度优先遍历,也称之为深度优先搜索,简称DFS。首先指定一个规则,在没有碰到重复顶点的情况下,始终向右手边走,A-B-C-D-E-F,走到F时发现A(已被标记)已经走过了,因此选择从右数第二条路,到了G-H,此时H周围的结点都被标记已经走过了。此时是否已经遍历了...原创 2018-09-25 16:30:31 · 345 阅读 · 0 评论 -
数据结构之图的存储结构
图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为G(V,E),其中,G表示一个图,V是顶点集合,E是边集合。邻接矩阵∞是一个极限值,用65535表示,权值大多数情况是正值,个别时候是0,甚至有时候是负值,所以用∞表示不存在。#define _CRT_SECURE_NO_WARNINGS//避免scanf不安全报错#include "stdio.h" #i...原创 2018-09-25 15:36:34 · 1199 阅读 · 0 评论 -
数据结构之排序
内排序是在排序整个过程中,待排序的所有记录全部被放置在内存中。外排序是由于排序的记录个数太多,不能同时放置在内存中,整个排序过程需要在内外存之间多次交换数据才能进行。这里我们介绍内排序的几种方法。排序用到的数据结构:#define MAXSIZE 10/*定义顺序表*/typedef struct{ int r[MAXSIZE+1]; int length;}SqList;/...原创 2018-09-28 18:50:11 · 386 阅读 · 0 评论