数据结构
Double___H
这个作者很懒,什么都没留下…
展开
-
LeetCode.No6——Z字形变换
题目将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。思路虽然题目说是Z字形,但我理解为N字形。看到题目时,第一时间想到的是递归,经过计算可发现规律,即每次递归时,第一个字符和第二个...原创 2020-01-01 16:35:44 · 248 阅读 · 0 评论 -
数据结构(七)——查找之哈希表
基本概念哈希函数:又叫散列函数,在关键字与记录在表中的存储位置之间建立一个函数关系,以 H(key) 作为关键字为 key 的记录在表中的位置,通常称这个函数 H(key) 为哈希函数。哈希地址:由哈希函数得到的存储位置称为哈希地址装填因子:设散列表空间大小为n,填入表中的结点 数为m,则称a=m/n为散列表的装填因子。冲突(Collision)与同义词: 若H(k1)=H(k2),则...转载 2019-07-29 16:26:11 · 279 阅读 · 0 评论 -
数据结构(八)——内部排序之归并排序
归并排序的概述将n个记录看成是n个长度为1的有序子表;将两两相邻的有序子表进行归并,若子 表数为奇数,则留下的一个子表直接进入下一 次归并;重复步骤(2),直到归并成一个长度为n 的有序表归并排序重要参数a【】:存储来的数据b【】:归并排序的辅助数组min:输入排序序列的起始位置max:输入排序序列的终点位置mid:将要排序序列的中间值p:从mid位置开始向后扫的一个指...原创 2019-08-02 19:49:40 · 346 阅读 · 0 评论 -
数据结构(八)——内部排序之桶排序和基数排序
桶排序的概述重要的参数a【】:作为桶的数组count【】:记录前若干个桶的累计基本思想首先进行一次扫描,知道了所要排的数据的最小值和最大值(即位于哪个区间)通过知道的区间设立桶的个数,每个桶对应一个值首先扫描一边,利用count【】记录桶中每个数据出现的次数(第一次对count【】操作)将count【】数组的元素从头开始向后累加(第二次对count【】操作)...原创 2019-08-02 21:15:14 · 282 阅读 · 0 评论 -
数据结构(八)——内部排序之表排序
表排序的适用情况待排序的元素庞大(例如要排序多部电影),这个时候可以通过间接排序的方法进行排序,即只需要在排序的时候改变元素的指针所指向的位置即可,这个时候可以运用表排序。代码中所运用到的结构体typedef struct{ int elem;//待排元素 int pos;//待排元素的指针}SLNode;//一个结点typedef struct{ SLNo...原创 2019-07-31 15:37:18 · 511 阅读 · 0 评论 -
数据结构(八)——内部排序之希尔排序
希尔排序的思想对待排记录序列先作“宏观”调整, 再作“微观”调整所谓“宏观”调整,指的是,“跳 跃式” 的插入排序希尔排序的概述将待排序的序列分成若干个子序列,分别对每个子序列进行插入排序例如:首先进行间隔为5的排序(即从第一个开始,每隔5个元素进行取一个元素,将这些元素进行插入排序,排序完后从第二个元素开始,照上做法进行排序,直到全部排序完成)再将间隔取5改为取间隔为3,再如上...原创 2019-07-31 15:50:38 · 222 阅读 · 0 评论 -
数据结构(八)——内部排序之快速排序
快速排序的概述快排类似于冒泡排序快排的步骤大致分为三步:第一步:选取枢轴。第二步:以枢轴为中间值,对未知的数据进行排序。将小于枢轴的数据置于枢轴的左边,大于枢轴的数据置于枢轴的右边。对枢轴两边的数据进行递归,当数据小于等于2时,进行返回。第一步:选取枢轴枢轴的选取有多种方法:1.直接选取未知元素序列的第一个的值作为枢轴2.生成随机数,取位置为随机数的值作为枢轴3.取中间的值...原创 2019-07-31 22:05:42 · 282 阅读 · 0 评论 -
数据结构(九)——外部排序之硬件部分
本博客基于对mooc中的《北京大学-数据结构与算法》及《西北大学-数据结构》的理解进行编写内存和外存之间的比较内存优点:访问速度快缺点:造价高,存储容量小,断电丢数据外存优点:价格低、信息不易丢失、便携带缺点:速度慢访问一个字节,访问内存(纳秒)和访问外存(毫秒),量级差别为100万倍,故涉及到外存的排序应尽量减少外存的访问次数硬件介绍部分磁盘磁盘的物理结构:主轴...原创 2019-08-05 16:32:48 · 283 阅读 · 0 评论 -
数据结构(八)——内部排序之堆排序
代码中所用到的结构体typedef struct heaptype{ int elem[MAX+1];//0位空着 int length;}Heaptype;堆排序的基本概念堆排序属于选择排序:出发点是利用前一次比 较的结果,减少“比较”的次数小根堆:1.对于任意一个非叶结点的关键字,都不大于其左、右儿子 结点的关键字。2.在堆中,以任意结点为根的子树仍然是堆。特别...原创 2019-08-01 19:56:19 · 336 阅读 · 0 评论 -
数据结构实验——最大数
题目描述给定一组非负整数(每个非负整数大小为 0-1000),重新排列它们的顺序使之按照下标顺序输出后组成一个最大的整数。示例 1:输入: 10 2输出: 210示例 2:输入: 3 30 34 5 9输出: 9534330说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数题目分析通过分析我们可以知道,最后得到的结果是直接输出一个数组。首先,由于要确定最大数,...原创 2019-08-01 20:51:01 · 359 阅读 · 0 评论 -
数据结构实验——荷兰国旗问题(三色排列)
问题描述输入一个整型数组,整数取值 0,1,2,可以重复。输出排序后的结果。 要求设计一个排序算法,常数辅助空间和一遍扫描。示例 1:输入: 0 1 0 1 2 0 1 0 1 0 2 2 0 1输出: 0 0 0 0 0 0 1 1 1 1 1 2 2 2示例 2:输入: 1 0 2 0 1 1 2 0 2 1输出: 0 0 0 1 1 1 1 2 2 2问题分析...原创 2019-08-01 21:06:42 · 754 阅读 · 0 评论 -
数据结构实验——就餐人数最多的时间段
题目描述学校要举办校庆晚宴,要求学生登记就餐时间,以确定在哪个时间段内就餐的学生数最多,从而调食品的供应量。就餐时间被分为了 N 个时间段,其中 N 可能会非常大,可以假 设 N 为 1 亿,也就是 100000000(这要求程序不能声明长度为 N 的数组或定义 N 个变量), 若未考虑此情况则不能得分。要求:排序算法的平均时间复杂度不得大于 O(MlogM)。先输入两个数字 N,M,表示就...原创 2019-08-01 22:30:09 · 3538 阅读 · 11 评论 -
数据结构(九)——外部排序之外排序
本博客基于对mooc中的《北京大学-数据结构与算法》及《西北大学-数据结构》的理解进行编写置换排序基于《西北大学-数据结构》置换排序的理解在这里,我们先假设:1.输入文件FI为:21,11,09,02,16,31,20,01,27,05,13,28 。2.工作区WA 容量m = 3 。3.输出文件为FO首先,我们从 FI 中读取三个数据进入 WA 。分别是 21,11,09选取 WA ...原创 2019-08-06 11:42:44 · 707 阅读 · 0 评论 -
数据结构(十)——索引之静态索引和倒排索引
静态索引基本概念与术语输入顺序文件:按照记录进入系统的顺序存储记录,输入顺序文件相当于未排序的线性表主码:数据库中每条记录的唯一标识辅码:数据库中可以出现重复值的码(注意,主码是唯一的,就类似于一个名字可以对应很很多人,但是一个身份证号就只可对应一个人),辅码索引把一个辅码值与具有这个辅码值得每一条记录的主码值关联起来。索引:一个关键码与它对应的数据记录的位置相关联的过程索引文件:用...原创 2019-08-08 15:47:25 · 685 阅读 · 0 评论 -
数据结构(九)——外部排序之文件
基本概念文件的类型按记录的类型分类:操作系统文件,数据库文件(单关键字文件,多关键字文件)按记录长度分类:定长记录文件,不定长记录文件基本术语数据域(数据场):记录中的每个数据项,称之为域或场(Field)关键字:唯一标识记录的域,称之为关键字。辅助关键字,称之为次关键字。记录(Record):若干相关的数据项的集合。如果存之于外存,则叫做记录。文件:记录的集合。记录的物理...原创 2019-08-06 23:40:36 · 310 阅读 · 0 评论 -
数据结构(七)——查找之B-树和B+树
基本概念m阶B树的结构定义每个结点至多有m个子结点除根结点和叶结点外,其他每个结点至少有【m/2】个子结点根结点至少有两个子结点:唯一例外的是根结点就是叶结点时没有子结点、此时B树只包含一个结点。所有的叶结点在同一层有k个子结点的非根结点恰好包含k-1个关键码B树的性质树高平衡,所有叶结点都在同一层关键码没有重复,父结点中的关键码是其子结点的分界B树吧(值接近)相关记录放...原创 2019-07-29 15:32:25 · 255 阅读 · 0 评论 -
数据结构(七)——查找之二叉排序树
代码中所用到的结构体typedef struct Node{ int elem;//存放数据 struct Node *lchild, *rchild; struct Node *prev;} TreeNode, *BiTree; //定义树节点的结构体typedef struct tree{ BiTree root;}Tree,*pTree;构造二...原创 2019-07-06 15:31:37 · 260 阅读 · 0 评论 -
数据结构(七)——查找之静态查找表
顺序表的查找从前往后找从第一个开始进行判断,对表中的元素和要查找的元素一一对应但是在判断元素是否相等的同时,也要对其增加一个 if 语句的判断,用于判断是否已经检索到了表尾但在顺序表的查找中一般是一定查找地到的,而且 if 判断语句又浪费了近一半的时间,故改进了算法的查找方式从后往前找首先要知道这种方式检索的顺序表的表头是空的。从表尾的最后一个判断,在表头设置一个和即将要检索的...原创 2019-07-05 16:16:57 · 341 阅读 · 0 评论 -
数据结构(二)——栈和队列
数据结构(二)——栈和队列一、栈定义:一中特殊的线性表,其插入和收纳处均在表的一端进行,是一种运算受限的线 性表。其中,允许插入和删除的一端称之为栈顶,另一端为栈底。栈的特点——后进先出栈有两种表示方法,一种是顺序表实现栈,另一种是链式存储实现栈。这里主要介绍链式存储实现栈的数据结构。a).栈的顺序存储(简介)即定义一个数组,以数组头为栈底,设一个int top指针指向栈顶,即可完成栈...原创 2019-06-25 20:11:43 · 329 阅读 · 0 评论 -
数据结构(二)——栈和队列之表达式求解
题目描述:给定一个表达式,先求其后缀式,然后根据后缀式求表达式的值(测试用例 中,操作数的个数大于5)。本题可以运用数据结构中的栈进行求解,其中有三个比较关键的步骤一、如何将输入的字符数据中的两位即两位以上的数据转化成int型进行计算。二、如何将表达式转化成逆波兰符号式并计算这里,我先给出我的栈的结构体定义typedef struct stack{ char sign[MAX]...原创 2019-06-26 16:49:36 · 492 阅读 · 0 评论 -
数据结构(二)——栈和队列之约瑟夫出圈
问题描述:用队列实现约瑟夫出圈问题:n个人排成一圈,从第一个开始报数, 报到m 的人出圈,剩下的人继续开始从1报数,直到所有的人都出圈为止(以n=41,m=3 为例)本问题运用数据结构中的队列进行求解,通过以链表构造循环队列进行求解,解决该问题的两个关键步骤。一、构造一个循环队列,并实现循环队列的入队和出队操作。二、用简便的方法实现每隔m-1个人进行出圈操作。首先,这里先给出数据结构的定义...原创 2019-06-26 17:17:52 · 594 阅读 · 0 评论 -
数据结构(二)——栈和队列之DFS和BFS遍历迷宫
代码目的:通过栈和队列分别实现迷宫的DFS遍历并输出可到达的全部点和BFS遍历输出走出迷宫的最短路径在迷宫输入到电脑中,以?表示起点,以0表示可走路径,以#表示墙,既不可以走的路径,以*表示可以到达的路径。一、利用栈实现迷宫的深度遍历并打印路径1.首先运用一个for循环找到迷宫的起点,将起点存入栈中。2.再运用一个while循环,依次寻找栈顶元素的上,右,下,左,是否为可到达路径并且未走过...原创 2019-06-26 20:52:29 · 637 阅读 · 0 评论 -
数据结构(三)——串之KMP算法
一、串类型的定义一:串的基本概念串变量——串变量和其他类型变量一样串常量——串常量和整常数、实常数一样串值–串长–空串–空格串空格串和空串的不同之处:例如“ ”和“”分别表示长度为1的空白串和长度为0的空串子串–主串子串的序号——将子串在主串中首次出现时的该子串的首字符对应在主串中的序号,称为子串在主串中的序号串相等——只有当两个串的长度相等,且各个对应位置的字符都相同时才相等...转载 2019-06-27 10:03:07 · 238 阅读 · 0 评论 -
数据结构(六)——图之DFS和BFS遍历
代码中所用到的结构体typedef struct arcnode{ int adjvex;//指向的下一个顶点 struct arcnode *next;//指向这个点的另一条边}Arcnode,*pArcnode;typedef struct vnode{ pArcnode firstarc;//点所指向的第一条边}Vnode,AdjList[30];t...原创 2019-07-02 20:00:38 · 800 阅读 · 0 评论 -
数据结构(六)——图之最小生成树Prim和Kruskal算法
代码中所用到的结构体typedef struct arcnode{ int weight;//边的权重 int adjvex;//指向的下一个顶点 struct arcnode *next;//指向这个点的另一条边}Arcnode,*pArcnode;typedef struct vnode{ pArcnode firstarc;//点所指向的第一条边...原创 2019-07-02 20:45:04 · 388 阅读 · 2 评论 -
数据结构(六)——图之关键路径
代码中所用到的结构体typedef struct arcnode{ int weight;//权重 int adjvex;//指向的下一个顶点 struct arcnode *next;//指向这个点的另一条边}Arcnode,*pArcnode;typedef struct vnode{ pArcnode firstarc;//点所指向的第一条边}V...原创 2019-07-02 21:26:03 · 481 阅读 · 0 评论 -
数据结构(四)——数组与广义表之三元矩阵的快速转置
数组数组的类型定义数组的组成:下标、值数组的特点:元素属于同一种数据类型、具有固定格式和数量的数据集合数组的顺序表示和实现数组的存储结构:数组是多维结构,而存储空间是一个一维的结构二维数组的存储域寻址——不同的存储方式有不同元素地址计算方法:大部分按行优先矩阵的压缩存储特俗矩阵的压缩存储:稀疏矩阵(矩阵中有许多特定的值)、特殊矩阵(矩阵中很多值相同的元素并且它们的分布有一...原创 2019-06-27 16:39:03 · 1030 阅读 · 0 评论 -
数据结构(五)——树和二叉树
树的有关概念树的定义树形结构是一种重要的非线性结构任一棵非空树中:(1)有且仅有一个称为根的结点。(2)其余结点可分为m个互不相交的集合。树的概念数据对象D:D是具有相同特性的数据元素的集合。数据关系R:1.若D为空集,则称为空树。2.在D中存在唯一的称为根的数据元素root。3.当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,„,Tm,其中每一棵...原创 2019-06-27 19:45:28 · 261 阅读 · 0 评论 -
数据结构(五)——树和二叉树之二叉树遍历、先序和中序构建二叉树、二叉树的的结构对称判断
代码中所用到的结构体定义typedef struct Node{ char ch;//存放数据 struct Node *lchild, *rchild; struct Node *next;} TreeNode, *BiTree; //定义树节点的结构体二叉树的交互式建立及二叉树的三种遍历二叉树的交互式建立二叉树的交互式建立运用了递归的算法,以先输入数据,...原创 2019-06-27 20:52:00 · 501 阅读 · 0 评论 -
数据结构(七)——查找之平衡二叉树
代码中所用到的结构体typedef struct node{ int key;//关键字 struct node*left; struct node*right; int height;//当前结点所在的高度}BTNode;构造平衡二叉树算法的主要思想为了提高查找的效率,于是在二叉排序树的基础上,有了二叉平衡树的诞生。其中,先介绍几个重要的概念:平衡...原创 2019-07-12 17:12:27 · 455 阅读 · 0 评论 -
数据结构(六)——图之最短路径
代码中所用到的结构体typedef struct arccell{ int adj;//权值 char *info;}ArcCell,AdjMatrix[MAX][MAX];typedef struct{ int vexs[MAX];//结点数据 AdjMatrix arcs; int vexnum,arcnum;//图的点数和边数 Gr...原创 2019-07-04 15:47:15 · 604 阅读 · 0 评论 -
数据结构(五)——树和二叉树之Huffman编码
定义的结构体typedef struct node{ char elem; float weight; int loc; int lch,rch,parent;}Node;计算字符串中的权重没什么技巧,直接计算int CalculateWeight(char a[],char b[],float weight[]){ int i=0,j;...原创 2019-06-29 10:23:46 · 275 阅读 · 0 评论 -
数据结构(六)——图
图的定义和术语弧头–弧尾–弧--有向图边–无向图–网--子图完全图–稀释图–稠密图假设图中有n个顶点,e条边:1.含有e=n(n-1)/2条边的无向图称作完全图; 2.含有e=n(n-1)条弧的有向图称作有向完全图; 3.若边或弧的个数e<nlog2n,则称作稀疏图, 否则称作稠密图。邻接点–度--入度–出度路径–路径长度–简单路径–简单回路:1.路径上边的数目称作路径长度;2....原创 2019-06-29 10:54:34 · 627 阅读 · 0 评论 -
数据结构(一)——线性表
数据结构(一)——线性表一、线性表的概念定义:线性表是n 个类型相同数据元素的有限序列线性表的逻辑特性:1、有限性2、相同性(同一表中的元素类型相同)3、相继性二、线性表的顺序存储基于博主自己的理解,线性表的顺序存储类似于基本数据类型中的数组,为静态的存储空间。不可以在除初始化外的地方对顺序表进行扩大。若由于数据过多,导致了原有的数据存储空间不足,则解决方法是申请一个2倍于当前顺...原创 2019-06-25 19:04:14 · 205 阅读 · 0 评论