数据结构
文章平均质量分 57
悟空在游泳
无
展开
-
广工AnyView数据结构-2
/**** 【题目】试写一算法,实现顺序栈的判空操作 StackEmpty_Sq(SqStack S)。 顺序栈的类型定义为: typedef struct { ElemType *elem; // 存储空间的基址 int top; // 栈顶元素的下一个位置,简称栈顶位标 int size; // 当前分配的存储容量 int increme原创 2017-10-27 12:57:42 · 2263 阅读 · 0 评论 -
树的应用--并查集
并查集的操作 并查集是一种简单的集合表示,它支持一下三种操作: 1.Union(S,Root1,Root2):把集合S中的子集合Root2并入子集合Root1中。要求Root1和Root2互不相交,否则不执行合并。 2.Find(S,x):查找集合S中单元素x所在的子集合,并返回该子集合的名字。 3.Initial(S):将集合S中每一个元素都初始化为只有一个单元素的子集合。通常用树(森林)原创 2017-11-22 18:58:31 · 698 阅读 · 0 评论 -
排序-1
排序 排序就是重新排列表中的元素,使表中的元素满足按关键字递增或递减的过程算法稳定性 如果待排序表中有两个元素Ri、Rj,其对应关键字keyi=keyj,且在排序前Ri在Rj的前面,如果使用某一排序算法后,Ri仍然在Rj的前面,则称这个排序算法是稳定的,否则称排序算法是不稳定的 算法是否具有稳定性并不能衡量一个算法的优劣,它主要是对算法的性质进行描述内部排序 指在排序期间元素全部存放在内存中原创 2017-11-22 22:57:06 · 156 阅读 · 0 评论 -
插入排序-1
插入排序 插入排序是一种简单直观的排序方法,其基本思想在于每次将一个待排序的记录,按其关键字大小插入到前面已经排序的子序列中,知道全部记录插入完成。直接插入排序 为了实现将元素L(i)插入到已有序的子序列L[1…i-1],需要执行以下操作: 1.查找出L(i)在L[1…i-1]中的插入位置k 2.将L[k…i-1]中所有元素全部后移一个位置 3.将L[i]复制到L[k]为了实现排序,将L(原创 2017-11-23 00:02:53 · 194 阅读 · 0 评论 -
折半插入排序
折半插入排序 如果线性表是有序的,进行查找可以用折半查找来实现。在确定出待插入位置后,就可以统一的向后移动元素了。void InsertSort(ElemType A[],int n){ int i,j,low,high,mid; for(i=2;i<=n;i++){ //依次将A[2]~A[n]插入到前面已排好序的序列中 A[0]=A[i];原创 2017-11-26 11:13:30 · 469 阅读 · 0 评论 -
广工anyview数据结构-6
/**** 【题目】试按依次对每个元素递归分解的分析方法重写求广义表的深度的递归算法。 广义表类型GList的定义: typedef enum {ATOM,LIST} ElemTag; typedef struct GLNode{ ElemTag tag; union { char atom; struct { G原创 2017-11-26 15:46:38 · 3062 阅读 · 1 评论 -
希尔排序
算法介绍 希尔排序又叫做缩小增量排序,其本质还是插入排序,只不过是将待排序序列按照某种规则分成几个子序列,分别对这几个子序列进行直接插入排序。这个规则的体现就是增量的选取,如果增量为1,就是直接排序。增量是逐渐减小的。直接插入排序适合于序列基本有序的情况,希尔排序的每趟排序都会使整个序列变得更加有序,等整个序列基本又虚了,再进行一次直接插入排序,这样会使排序效率更高,这就是希尔排序的思想。时间复杂原创 2017-11-26 23:30:16 · 229 阅读 · 0 评论 -
冒泡排序
算法介绍 冒泡排序又称起泡排序。它是通过一系列的“交换”动作完成的。首先,第一个关键字和第二个关键字比较,如果第一个大,则二者交换,否则不执行交换;然后第二个关键字和第三个关键字比较,如果第二个大,则执行交换,否则不交换……依次执行下去。第一趟冒泡排序完成,最大的关键字被交换到了最后。经过多趟排序,最终使整个序列有序。起泡排序算法结束的条件是在一趟排序过程中没有发生关键字交换。算法实现void B原创 2017-11-27 00:22:19 · 271 阅读 · 0 评论 -
快速排序
算法介绍 快速排序是“交换”累的排序,通过多次划分操作实现排序。以升序为例,其执行流程可以概括下:每一趟选择当前所有子序列中的一个关键字(通常是第一个)作为枢轴,将子序列中比枢轴小的移到枢轴前面,比枢轴打的移到枢轴后面;当本趟所有子序列都被枢轴以上述规则划分后会得到新的一组更短的子序列。算法思想 选第一个为关键字,从右开始找小于他的交换,再从左找大于它的交换,完成一趟排序。依次类推,多趟排序后使原创 2017-11-27 13:20:34 · 235 阅读 · 0 评论 -
C语言-B树(B-树)的完整实现
B树的定义 B树是一种平衡的多路查找树。 一颗m阶B树,或为空树,或为满足下列特性的m叉树。 (1)树中每个结点最多含有m棵子树; (2)若根结点不是叶子结点,则至少有两颗子树; (3)除根之外的所有非终端结点至少有[m/2]; (4)每个非终端结点中包含信息:(n,A0,K1,A1,K2,A2,…,Kn,An)。其中 ①Ki(1≤i≤n)为关键字,且关键字按升序排序。 ②指针Ai(原创 2017-12-25 17:57:20 · 27814 阅读 · 30 评论 -
电梯模拟
-严蔚敏数据结构 -电梯模拟系统的实现 #include#include#include #include#include #include#include#include#include"HEAD.h"using namespace std;void PrintClientInfo(Client p,ClientStatus s){//输出乘客信息 s原创 2018-01-14 16:24:16 · 2708 阅读 · 6 评论 -
广工anyview数据结构-7
/**** 【题目】若两棵二叉树T1和T2皆为空,或者皆不空 且T1的左、右子树和T2的左、右子树分别相似,则 称二叉树T1和T2相似。试编写算法,判别给定两棵 二叉树是否相似。 二叉链表类型定义: typedef struct BiTNode { TElemType data; struct BiTNode *lchild, *rchild; } BiTNode,转载 2018-01-18 19:36:27 · 1298 阅读 · 0 评论 -
PAT-A1044题解
1044 Shopping in Mars (25 分)Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diamond has a value (in Mars dollars M$). When making the payment, the cha...原创 2019-02-06 21:51:21 · 540 阅读 · 0 评论 -
树、森林与二叉树的转换
由于二叉树和树都可以用二叉链表作为存储结构,则以二叉链表作为媒介可以导出树与二叉树的一个对应关系,即给定一棵树,可以找到唯一的一颗二叉树与之对应。从物理结构上看,树的孩子兄弟表示法语二叉树的二叉链表表示法相同,即每个结点共有两个指针,分别指向结点第一个孩子和结点的下一兄弟结点,而二叉链表使用双指针。因此,就可以用同一存储结构的不同解释将一棵树转换为二叉树。树转换成二叉树 每个结点左指针指向它的第一原创 2017-11-22 10:01:12 · 5572 阅读 · 0 评论 -
树与森林
树的存储结构 树的存储方式有多种,可以采用顺序存储结构,也可以采用链式存储结构。双亲表示法 这种存储方式采用一组连续空间来存储每个结点,同时在每个结点中增设一个伪指针,指示其双亲结点在数组中的位置。 //双亲表示法的存储结构#define MAX_TREE_SIZE 100 //树中最多结点数typedef struct{ /原创 2017-11-22 08:20:37 · 344 阅读 · 0 评论 -
平衡二叉树
平衡二叉树的定义 为了避免树的高度增长过快,降低二叉排序树的性能,规定在插入和删除二叉树结点时,要保证任意结点的左右子树高度差的绝对值不超过1,将这样的二叉树称为平衡二叉树,简称平衡树(AVL树)。平衡因子 定义结点的左子树与右子树的高度差为该结点的平衡因子,则平衡二叉树结点的平衡因子只可能为-1,0,1。平衡二叉树的插入 二叉排序树保证平衡的基本思想:每当在二叉排序树中插入(或删除)一个结点原创 2017-11-21 14:42:23 · 464 阅读 · 0 评论 -
广工AnyView数据结构-3
/**** 【题目】试以顺序表L的L.rcd[L.length+1]作为监视哨, 改写教材3.2节中给出的升序直接插入排序算法。 顺序表的类型RcdSqList定义如下: typedef struct { KeyType key; … } RcdType; typedef struct { RcdType rcd[MAXSIZE+1]; // rcd[0]闲置原创 2017-10-27 21:41:04 · 1564 阅读 · 0 评论 -
广工AnyView数据结构-4
/**** 【题目】已知某哈希表的装载因子小于1,哈希函数H(key) 为关键字(标识符)的第一个字母在字母表中的序号,处理 冲突的方法为线性探测开放定址法。试编写一个按第一个 字母的顺序输出哈希表中所有关键字的算法。 哈希表的类型HashTable定义如下:define SUCCESS 1define UNSUCCESS 0define DUPLICATE -1typedef c原创 2017-10-27 21:58:13 · 1781 阅读 · 0 评论 -
树
树:树是N(N≥0)个结点的有限集合,N=0时,称为空树。 在任意一棵非空树中应满足: 1.有且仅有一个特定的称为根的结点 2.当N>1时,其余结点可分为m(m>0)个互不相交的有限集合T1,T2,…,Tm,其中每一个集合本身又是一棵树,称为根结点的子树显然树的定义是递归的,是一种递归的数据结构。树作为一种逻辑结构,同时也使一种分层结构,具有以下两个特点: 1.树的根结点没有前驱结点之外,所原创 2017-10-28 12:37:07 · 196 阅读 · 0 评论 -
散列(Hash)表(1)
散列表的基本概念以及常用的散列函数原创 2017-10-16 09:20:59 · 299 阅读 · 0 评论 -
Anyview数据结构-5
/**** 【题目】试编写如下定义的递归函数的递归算法: g(m,n) = 0 当m=0,n>=0 g(m,n) = g(m-1,2n)+n 当m>0,n>=0 ****/int G(int m, int n) /* 如果 m<0 或 n<0 则返回 -1 */{ if(m<0||n<0) return -1;原创 2017-11-10 11:57:39 · 1522 阅读 · 0 评论 -
广工AnyView数据结构-1
/**** 【题目】试写一算法,如果三个整数a,b和c的值 不是依次非递增的,则通过交换,令其为非递增。 */void Descend(int &a, int &b, int &c)/* 通过交换,令 a >= b >= c */{ int temp; if(c>=b) { temp=b; b=c; c=temp;原创 2017-10-24 23:13:31 · 4603 阅读 · 0 评论 -
散列表-2
处理冲突的方法 任何设计出来的散列函数都不可能绝对地避免冲突,为此,必须考虑在发生冲突时应该如何进行处理,即为产生冲突的关键字寻找下一个“空”的Hash地址。 假设已经选定散列函数H(key),下面用Hi表示发生冲突后第i次探测的散列地址。 一.开放定址法 所谓开放定址法,指的是可存放新表项的空闲地址既指向它的同义词表项开放,又向它的非同义词表项开放。其数学递推公式Hi=(H(key)+di原创 2017-10-16 22:47:18 · 694 阅读 · 0 评论 -
二叉树-1
1.二叉树的定义 二叉树是一种树形结构,其特点是每个节点至多只有两颗子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。二叉树与度为2的有序树的区别 1.度为2的树至少有三个结点,而二叉树可以为空 2.度为2的有序树的孩子结点的左右次序是相对于另一孩子结点而言的,如果某个结点只有一个孩子结点,这个孩子结点就无需区分其左右次序结点编号方式 自上而下,自左向原创 2017-11-12 13:03:51 · 372 阅读 · 0 评论 -
二叉树-2
二叉树的存储结构 1.顺序存储结构 二叉树的顺序存储结构就是用一组地址连续的存储单元依次自上而下、自左至右存储完全二叉树上的结点元素,即将完全二叉树上编号为i的结点元素存储在某个数组下标为i-1的分量中,然后通过一些办法确定结点在逻辑上的父子和兄弟关系。对于完全二叉树和满二叉树采用顺序存储比较合适 但对于一般的二叉树,为了让数组下标能反映二叉树中结点之间的逻辑关系,只能添加一些并不存在的空结点原创 2017-11-12 21:49:46 · 318 阅读 · 0 评论 -
二叉树-3
二叉树的遍历 所谓二叉树的遍历,是指按某条搜索路径访问树中的每个结点,使得每个结点均被访问一次,而且只被访问一次。 由二叉树的递归定义可知,遍历一颗二叉树便要决定对根结点N,左子树L和右子树R的访问顺序。按照先遍历左子树再遍历右子树的原则,常见的遍历次序有先序(NLR)、中序(LNR)、后序(LRN)三种遍历算法。先序遍历 先序遍历的操作过程为: 如果二叉树为空,什么也不做。否则: 1.访原创 2017-11-13 11:10:48 · 255 阅读 · 0 评论 -
线索二叉树
线索二叉树基本概念 二叉树的遍历就是以一定的规则将二叉树中的结点排列成一个线性序列,从而得到,二叉树结点的各种遍历序列。二叉树遍历的实质就是对一个非线性结构进行线性化操作,使在这个访问序列中每一个结点(除第一个和最后一个)都有一个直接前驱和直接后继。 传统的链式存储只能体现一种父子关系,不能直接得到结点在遍历中的前驱或后继。通过观察,我们发现在二叉链表表示的二叉树中存在大量的空指针,若利用这些空原创 2017-11-13 22:20:26 · 197 阅读 · 0 评论 -
B树
B树定义 B树,称为多路平衡查找树。B树中所有结点的孩子结点树的最大值称为B树的阶,通常称为m。一颗m阶B树或为空树,或为满足以下特性的m叉树: 1.树中每个结点至多有m棵子树(至多含有m-1个关键字) 2.若根结点不是终端结点,则至少有两颗子树 3.除根结点外的所有非叶结点至少有【m/2】棵子树。(至少含有【m/2】-1个关键字)【】是向上取整符号。 4.所有的叶结点都出现在同一层次上,原创 2017-11-29 09:10:56 · 553 阅读 · 0 评论 -
二叉排序树
变量名命名规则 ·在名称中只能使用字母字符、数字和下划线(_) ·名称的第一个字符不能是数字 ·区分大写字符与小写字符 ·不能将C++关键字用作名称 ·以两个下划线或下划线和大写字母打头的名称全部被保留给实现 ·C++对于名称的长度没有限制整型 C++的基本整型有char,short,int,long和long longC++提供了一种灵活的标准,它确保了最小长度: ·short至少原创 2017-11-20 22:20:28 · 1233 阅读 · 0 评论 -
数据结构易错知识点总结(持续note)
1.二叉排序树查找成功的平均长度为(num11+num22+…numn*n)/numsum;注意:numi为高度为i时的结点数2.二叉排序树查找失败的平均长度是(叶子节点高度+1)的总和/叶子节点数;...原创 2019-03-16 15:44:07 · 585 阅读 · 0 评论