![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 70
practicePLUS
你的目标到底是什么
展开
-
栈与队列
#include #include #define OK 1#define TRUE 1#define ERROR -1#define FALSE -1#define OVERFLOW -2#define ElemType int#define Status int//栈的顺序存储结构//定义top变量指示栈顶元素在数组中的位置//空栈判定条件 top=-1 //顺序栈原创 2017-12-31 12:19:07 · 174 阅读 · 0 评论 -
静态链表的初始化、插入、删除
#include #include #define OK 1#define TRUE 1#define ERROR -1#define FALSE -1#define OVERFLOW -2#define ElemType int#define Status int//------静态链表 X 使用数组实现链表,可以在没有指针的编程语言中实现链表结构#define MAXSI原创 2017-12-28 21:36:57 · 2842 阅读 · 1 评论 -
四 查找
二叉树:每个结点最多有两个子树的树结构且左子树和右子树是有顺序的,不能颠倒,即使树中某结点只有一颗子树,也要区分它是左子树还是右子树1、已知前序遍历序列和中序遍历序列,可以唯一确定一颗二叉树2、已知后序遍历序列和中序遍历序列,可以唯一确定一颗二叉树。但是已知前序遍历和后序遍历,是不能确定一颗二叉树的。因为无法确定左子树和右子树。比如前序遍历是ABC,后序遍历是CBA.则有以下四种情形:二叉查找树(...转载 2018-04-11 11:37:09 · 285 阅读 · 0 评论 -
建立二叉树
建立二叉树,其实与二叉树的遍历类似,把打印结点的部分换成生成结点、给结点赋值的操作即可比如代码://利用前序遍历序列AB#D##C#建立二叉树void CreateBiTree(TreeNode*T){ typename ch; scanf("%c", ch); if (ch == '#'); T = NULL; else { TreeNode*T = new TreeNode;...转载 2018-04-15 15:34:16 · 907 阅读 · 0 评论 -
以二叉树的中序遍历为例,理解其递归过程
转自: 点击打开链接1 void inorder(tree_pointer ptr)2 {3 if (ptr) {4 inorder(ptr->left_child);5 printf("\t%d", ptr->data);6 inorder(ptr->right_child);7 }8 }函数本...转载 2018-04-12 21:50:21 · 1529 阅读 · 3 评论 -
用vector实现二维向量
如果一个向量的每一个元素是一个向量,则称为二维向量,例如[cpp] view plain copyvector<vector<int> >vv(3, vector<int>(4));//这里,两个“>”间的空格是不可少的 将构造一个二维向量vv,它含有三个元素,每个元素含有4个int型元素的向量。编译器两次调用vector的构造函数构造对象vv,第一次调...转载 2018-06-08 16:12:36 · 7765 阅读 · 0 评论 -
三 B树与B+树
1、多路查找树 性质: 1、每一个结点的孩子数可以多于两个,且每一个结点处可以存储多个元素 2、元素之间存在某种特定的排序关系1、2-3树每一个结点都有两个孩子(2结点)或三个孩子(3结点)定义:1)要么为空,要么:2)对于2节点,该节点保存一个key及对应value,以及两个指向左右节点的节点,左节点也是一个2-3节点,所有的值都比key要小,右节点也是一个2...转载 2018-06-25 20:05:30 · 3066 阅读 · 0 评论 -
二 图
一、基本术语图:由有穷、非空点集和边集合组成,简写成G(V,E);Vertex:图中的顶点;无向图:图中每条边都没有方向;有向图:图中每条边都有方向;无向边:边是没有方向的,写为(a,b)有向边:边是有方向的,写为<a,b>有向边也成为弧;开始顶点称为弧尾,结束顶点称为弧头;简单图:不存在指向自己的边、不存在两条重复的边的图;无向完全图:每个顶点之间都有一条边的无向图;有向完全图:每个...转载 2018-06-26 20:21:13 · 468 阅读 · 0 评论 -
关于链表中头指针和头结点的理解
线性表使用顺序(数组)存储时有个弊端,那就是在插入和删除时需要大量的移动数据,这显示是非常消耗时间的,所以可以采用链式存储,即有一个指针域(单链表),来记录下个结点的存储位置(地址),这样在插入和删除结点时只需要修改指针域即可,从而大量减少移动数据所消耗的时间。来看链表的定义:struct node { int data; struct node *next;};其中...转载 2018-05-29 16:04:03 · 52532 阅读 · 14 评论 -
三 树
//树//树的存储结构//双亲表示法----结构定义#define MAXTREESIZE 100typedef int TElemType;//树结点的数据类型,目前暂定为整型typedef struct PTNode //结点结构{ TElemType data;//结点数据 int parent;//双亲位置}PTNode;typedef struct//树结构{ P原创 2018-01-02 15:49:30 · 190 阅读 · 0 评论 -
二 图 之 拓扑排序算法、关键路径
1、拓扑排序---主要解决一个工程能否顺序进行 拓扑排序的意义?举个例子先:一个软件专业的学生学习一系列的课程,其中一些课程必须再学完它的基础的先修课程才能开始。如:在《程序设计基础》和《离散数学》学完之前就不能开始学习《数据结构》。这些先决条件定义了课程之间的领先(优先)关系。这个关系可以用有向图更清楚地表示。图中顶点表示课程,有向边表示先决条件。若课程i是课程j的先决条件,转载 2018-01-05 19:26:50 · 629 阅读 · 0 评论 -
空间复杂度
空间复杂度(SpaceComplexity)是对一个算法在运行过程中临时占用存储空间大小的量度。一个算法的 空间复杂度只考虑在运行过程中为 局部变量分配的 存储空间的大小,它包括为参数表中 形参变量分配的存储空间和为在 函数体中定义的局部变量分配的存储空间两个部分。若一个算法为 递归算法,其 空间复杂度为递归所使用的 堆栈空间的大小,它等于一次调用所分配的临时 存储空间的大小乘以被调用原创 2018-01-28 20:34:04 · 809 阅读 · 0 评论 -
五 常用排序算法总结
目录冒泡排序 鸡尾酒排序 选择排序 插入排序 二分插入排序 希尔排序 归并排序 堆排序 快速排序 我们通常所说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序。 排序算法大体可分为两种: 一种是比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排...转载 2018-06-08 21:29:11 · 423 阅读 · 1 评论 -
一 串
定义由零个或多个字符组成的有限序列,又叫字符串空格串:是只包含空格的串。注意与空串不同(无长度)子串与主串:串中任意个数的连续字符组成的子序列,包含子串的串称为主串子串在主串中的位置:是子串的第一个字符在主串中的序号串的模式匹配子串的定位操作 例如从文档中找到所有 “hello”朴素的模式匹配算法 朴素的模式匹配算法,就是把要查找的内容,一步步的与要查找的文章进行进行比较。如果匹配失败,则主...转载 2018-06-28 11:35:15 · 325 阅读 · 0 评论