数据结构
椋七
没呢
展开
-
排序技术
1、排序的基本概念在排序问题中,通常将数据元素称为记录。排序:给定一组记录的集合{r1, r2, ……, rn},其相应的关键码分别为{k1, k2, ……, kn},排序是将这些记录排列成顺序为{rs1, rs2, ……, rsn}的一个序列,使得相应的关键码满足ks1≤ks2≤……≤ksn(称为升序)或ks1≥ks2≥……≥ksn(称为降序)。正序:待排序序列中的记录已按关键码排好序。...原创 2019-12-16 21:06:41 · 182 阅读 · 0 评论 -
查找技术——平衡二叉树、散列表
1、平衡二叉树:或者是一棵空的二叉排序树,或者是具有下列性质的二叉排序树:⑴ 根结点的左子树和右子树的深度最多相差1;⑵ 根结点的左子树和右子树也都是平衡二叉树。平衡因子:结点的平衡因子是该结点的左子树的深度与右子树的深度之差。在平衡树中,结点的平衡因子可以是1,0,-1。最小不平衡子树:在平衡二叉树的构造过程中,以距离插入结点最近的、且平衡因子的绝对值大于1的结点为根的子树。构造时,...原创 2019-12-02 20:23:49 · 222 阅读 · 0 评论 -
查找技术——线性表的查找技术
1、查找的基本概念列表:由同一类型的数据元素组成的集合。关键码:数据元素中的某个数据项,可以标识列表中的一个或一组数据元素。键值:关键码的值。主关键码:可以唯一地标识一个记录的关键码。次关键码:不能唯一地标识一个记录的关键码。查找 :在具有相同类型的记录构成的集合中找出满足给定条件的记录。平均查找长度:将查找算法进行的关键码的比较次数的数学期望值定义为平均查找长度。2、静态查找 :...原创 2019-12-02 19:40:33 · 420 阅读 · 0 评论 -
查找技术——二叉排序树
1、二叉排序树二叉排序树(也称二叉查找树):或者是一棵空的二叉树,或者是具有下列性质的二叉树:⑴若它的左子树不空,则左子树上所有结点的值均小于根结点的值;⑵若它的右子树不空,则右子树上所有结点的值均大于根结点的值;⑶ 它的左右子树也都是二叉排序树。2、中序遍历二叉排序树可以得到一个按关键码有序的序列3、#include <iostream>using namespac...原创 2019-12-02 19:06:11 · 155 阅读 · 0 评论 -
图——最短路径、有向无环图
1、在非网图中,最短路径是指两顶点之间经历的边数最少的路径。在网图中,最短路径是指两顶点之间经历的边上权值之和最短的路径。单源点到其他顶点的最短路径Dijkstra方法,O(n2)任意一对顶点之间的最短路径Floyed方法,O(n3)2、Dijkstra算法(不适用于带负权的边)n个顶点,需要找n-1条最短路径。基本思想:1、设置一个集合S存放已经找到最短路径的顶点,S的初始状...原创 2019-11-28 15:51:24 · 979 阅读 · 0 评论 -
图——最小生成树
1、生成树的代价:设G=(V,E)是一个无向连通网,生成树上各边的权值之和称为该生成树的代价。最小生成树:在图G所有生成树中,代价最小的生成树称为最小生成树。2、MST性质最小生成树具有MST性质:假设G=(V, E)是一个无向连通网,U是顶点集V的一个非空子集。若(u, v)是一条具有最小权值的边,其中u∈U,v∈V-U,则必存在一棵包含边(u, v)的最小生成树。MST性质的应用:构造...原创 2019-11-28 14:48:28 · 529 阅读 · 0 评论 -
图——图的存储结构
1、邻接矩阵用一个一维数组存储图中顶点的信息用一个二维数组(称为邻接矩阵)存储图中各顶点之间的邻接关系。无向图的邻接矩阵:主对角线为 0 且一定是对称矩阵。顶点i的度:邻接矩阵的第i行(或第i列)非零元素的个数。判断顶点 i 和 j 之间是否存在边:测试邻接矩阵中相应位置的元素arc[i][j]是否为1。求顶点 i 的所有邻接点:将数组中第 i 行元素扫描一遍,若arc[i][j]为...原创 2019-11-27 22:39:22 · 506 阅读 · 0 评论 -
图——图的逻辑结构
1、图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G=(V,E)注意:在线性表中,元素个数可以为零,称为空表;在树中,结点个数可以为零,称为空树;在图中,顶点个数不能为零,但可以没有边。无向边:顶点vi和vj之间没有方向的边,称为无向边,表示为(vi,vj)。无向图:图的任意两个顶点之间的边都是无向边的图。有向边:从顶点vi到vj有方向的边,称为有向边,表示为<v...原创 2019-11-27 20:31:20 · 1446 阅读 · 0 评论 -
树和二叉树——森林、线索二叉树
1、三叉链表在二叉链表的基础上增加了一个指向双亲的指针域。2、三叉链表的结点数据类型声明template<class T>struct Node{ T data; Node<T> * lchild, *rchild,*parent;};3、树—二叉树1.兄弟加线。2.保留双亲与第一孩子连线,删去与其他孩子的连线。3.顺时针转动,使之层次分明。...原创 2019-11-19 12:05:18 · 296 阅读 · 0 评论 -
树和二叉树——算法设计练习习题
1、设计算法求二叉树的结点个数。void Count(BiNode *root){ if (root) { Count(root->lchild); number+ +; //number为数据成员 Count(root->rchild); }}2、树中节点的数目左子树中节点的数目+右子树中节点的数目+1...原创 2019-11-19 11:38:28 · 773 阅读 · 0 评论 -
树和二叉树——二叉树遍历与构建
1、二叉树的遍历二叉树的遍历是指从根结点出发,按照某种次序访问二叉树中的所有结点,使得每个结点被访问一次且仅被访问一次。属于抽象操作,可以是对结点进行的各种处理,这里简化为输出结点的数据。包括前序遍历、中序遍历、后序遍历、层序遍历。遍历操作的目的:非线性结构线性化前序(根)遍历若二叉树为空,则空操作返回;否则:①访问根结点;②前序遍历根结点的左子树;③前序遍历根结点的右子树。...原创 2019-11-19 11:26:31 · 228 阅读 · 0 评论 -
树和二叉树——二叉树
1、二叉树的定义二叉树是n(n≥0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。2、二叉树的特点⑴ 每个结点最多有两棵子树;⑵ 二叉树是有序的,其次序不能任意颠倒。注意:二叉树和树是两种树结构。3、二叉树的基本形态4、特殊的二叉树...原创 2019-11-19 10:51:06 · 697 阅读 · 0 评论 -
树和二叉树——树
1、树的定义树:n(n≥0)个结点的有限集合。当n=0时,称为空树;任意一棵非空树满足以下条件:⑴ 有且仅有一个特定的称为根的结点;⑵ 当n>1时,除根结点之外的其余结点被分成m(m>0)个互不相交的有限集合T1,T2,… ,Tm,其中每个集合又是一棵树,并称为这个根结点的子树。树的定义是采用递归方法。2、树的基本术语结点的度:结点所拥有的子树的个数。树的度:树中各结点度...原创 2019-11-18 22:16:48 · 129 阅读 · 0 评论 -
有序的双链表的实现
描述定义有序的双链表类,链表中存储整型数据,创建带头结点的有序双链表,要求包含以下成员函数:双链表的构造函数(非空的链表,输入数据为0,表示输入结束)插入操作(将一个数据元素插入到有序的双链表中,插入之后链表仍然有序,输入数据为0表示插入操作结束)按值删除节点(考虑有重复值的情况)双链表的遍历操作双链表的析构输入输入链表中的元素,根据输入元素,创建有序双链表(非空的链表,输入数据为...原创 2019-11-15 20:31:54 · 269 阅读 · 0 评论 -
单链表的实现
描述定义单链表类,创建带头结点的单链表(节点类型为整型数据),要求包含以下成员函数:头插法创建单链表(利用构造函数实现)尾插法创建单链表(重载构造函数实现)链表的遍历按值删除一个节点按位置删除一个节点链表的析构输入输入一组数据,以尾插法的形式创建单链表(0表示输入结束)(构造第一个链表)输入一组数据,以头插法的形式创建单链表(0表示输入结束)(构造第二个链表)输入要删除元素的...原创 2019-11-15 20:30:41 · 285 阅读 · 0 评论 -
字符串和多维数组——广义表
1、广义表(列表): n ( >= 0 )个表元素组成的有限序列,记作:LS = (a0, a1, a2, …, an-1)LS是表名,ai是表元素,它可以是表 (称为子表),可以是数据元素(称为原子)。n为表的长度。n = 0 的广义表为空表。2、广义表的基本概念长度:广义表LS中的直接元素的个数;深度:广义表LS中括号的最大嵌套层数。表头:广义表LS非空时,称第一个元素为...原创 2019-11-12 16:15:00 · 251 阅读 · 0 评论 -
字符串和多维数组——多维数组与矩阵的压缩存储
1、数组:由类型相同的数据元素(可以是线性表)构成的有序集合,每个元素受n(n≥1)个线性关系的约束,并称该数组为 n 维数组。广义表:元素为线性表,类型可不同。数组的特点:元素本身可以具有某种结构,属于同一数据类型;数组是一个具有固定格式和数量的数据集合。二维数组是数据元素为线性表的线性表。2、寻址数组没有插入和删除操作,所以,不用预留空间,适合采用顺序存储。一维数组:设一维数组的...原创 2019-11-12 16:06:55 · 324 阅读 · 0 评论 -
字符串和多维数组——字符串
1、字符串:是零个或多个字符组成的有限序列,只包含空格的串称为空格串。长度为0的串称为空串。**2、**顺序串如何表示串的长度?方案1:用一个变量来表示串的实际长度。方案2:在串尾存储一个不会在串中出现的特殊字符作为串的终结符,表示串的结尾。方案3:用数组的0号单元存放串的长度,从1号单元开始存放串值。3、链接串:用链接存储结构来存储串。4、模式匹配:给定主串S="s1s2…sn"和...原创 2019-11-12 15:23:41 · 197 阅读 · 0 评论 -
栈和队列——队列
1、队列:只允许在一端进行插入操作,而另一端进行删除操作的线性表。空队列:不含任何数据元素的队列。操作特性:先进先出通常情况下,队首元素存放在下标为0的一端2、指针设置队头、队尾两个指针队头指针指向队头元素的前一个位置;队尾指针指向队中最后一个元素3、假溢出现象如何解决?循环队列:将存储队列的数组头尾相接。不存在物理的循环结构,用软件方法实现。求模:rear=(rear+1)...原创 2019-11-12 14:15:16 · 134 阅读 · 0 评论 -
整数顺序表的基本运算
#include<bits/stdc++.h>using namespace std;const int MaxSize = 100;template<class DataType>class SeqList{public: SeqList(){length=0;} SeqList(DataType a[],int n); ~SeqLis...原创 2019-09-22 18:10:53 · 653 阅读 · 0 评论 -
栈和队列——链栈
只能执行插入和删除操作,头插法效率更高1.类的声明template <class T>class LinkStack{ public: LinkStack( ) {top=NULL;}; ~LinkStack( ); void Push(T x); T Pop( );...原创 2019-10-04 22:25:01 · 214 阅读 · 0 评论 -
栈和队列——顺序栈
栈的特性:后进先出1.顺序栈:用一维数组实现。通常把数组下标为0的一端作为栈底,设指针top指示栈顶元素在数组中的位置。栈元素的数组长度为StackSize,则栈空时栈顶指针top=-1,栈满时栈顶指针top=StackSize-1;入栈top加一,出栈top减一。①顺序栈的声明:const int MAX_SIZE=100;template <class T>...原创 2019-10-04 22:06:40 · 262 阅读 · 0 评论 -
线性表——双链表
双链表的结点结构空的双向链表first->rlink=NULL; first->llink=NULL; Last=first;设指针p指向双链表中某一结点,则有下式成立:p->llink->rlink = p = p->rlink->llink 插入操作处理原则:先处理每个方向的 远端指针,再处理近端指针q->rlink=p-&g...原创 2019-10-04 17:50:47 · 415 阅读 · 0 评论 -
线性表——循环链表
定义template <class T>struct Node{ T data; Node<T> *next;};template <class T>class CycleLinkList{ public: CycleLinkList( ); CycleLinkList(T a[ ], int n); ...原创 2019-10-04 17:06:23 · 96 阅读 · 0 评论 -
线性表——单链表
链表结点数据类型的定义在C++中,可以用结构类型来描述单链表的结点 ,由于结点的元素类型不确定,所以采用C++的模板机制。template <typename T>struct Node { T data; Node<T> *next; //此处<T>也可以省略};单链表的实现template <class T...原创 2019-10-04 16:54:29 · 195 阅读 · 0 评论