数据结构
南风起。
这个作者很懒,什么都没留下…
展开
-
数据结构——排序算法总结
冒泡排序就从最为大家熟知的冒泡排序开始,原理:假设有一个无序数组s[n],一趟排序的过程:把第一个元素与第二个元素比较,如果第一个比第二个大,那么交换他们的位置。接着继续比较第二个元素和第三个元素的大小,如果第二个比第三个大,那么交换他们的位置,以此类推…代码分析:一趟排序只能将数组中的最大值挪到数组的末尾(即一次确定一个元素的最终位置),所以在每一趟排序结束后要减少待排元素个数,因此2...原创 2020-01-09 19:00:19 · 123 阅读 · 0 评论 -
数据结构——折半查找
折半查找基本思想:假设有序表按关键码升序排列,取中间记录作为比较对象,若给定值与中间记录相等,则查找成功;若给定值小于中间记录,则在有序表的左半区继续查找;若给定值大于中间记录,则在有序表的右半区继续查找。不断重复上述过程,知道查找成功或者查找区域无记录,查找失败。private static <T extends Comparable<T>> int binaryS...原创 2019-12-30 00:21:30 · 3217 阅读 · 0 评论 -
数据结构—顶点之间的最短路径Floyd算法
Floyd算法问题描述:对于一个各边权值均大于零的有向图,对每一对顶点i≠j,求出顶点i与顶点j之间的最短路径和最短路径长度。多源最短路径问题: Floyd算法假设有向图G=(V,E)采用邻接矩阵存储。设置一个二维数组A用于存放当前顶点之间的最短路径长度,分量A[I] [j] 表示当前顶点i j的最短路径长度。递推产生一个矩阵序列:A0 A1 … Ak … A...原创 2019-12-02 23:05:47 · 1016 阅读 · 0 评论 -
数据结构—Dijkstra算法
Dijkstra算法在了解 Dijkstra算法 之前,要先了解一下路径的问题路径:考虑带权有向图,把一条路径(仅仅考虑简单路径)上所经边的权值之和定义为该路径的路径长度或称带权路径长度。最短路径:从源点到终点可能不止一条路径,把路径长度最短的那条路径称为最短路径。从一个顶点到其余各顶点的最短路径问题描述:给定一个带权有向图G与源点v,求从v到G中其他顶点的最短路径,并限定各边上的权...原创 2019-12-02 22:40:24 · 458 阅读 · 0 评论 -
数据结构—最小生成树Kruskal算法
Kruskal算法克鲁斯卡尔(Kruskal)算法也是一种求带权无向图的最小生成树的构造性算法。按权值的递增次序选择合适的边来构造最小生成树的方法。克鲁斯卡尔(Kruskal)算法过程:(1)置U的初值等于V(即包含有G中的全部顶点),TE的初值为空集(即图T中每一个顶点都构成一个连通分量)。(2)将图G中的边按权值从小到大的顺序依次选取: 若选取的边未使生成树T形成回路,则加入TE...原创 2019-12-02 21:26:15 · 972 阅读 · 0 评论 -
数据结构—图的最小生成树prim算法
prim算法prim算法是求图的最小生成树的一种算法,它是根据图中的节点来进行求解,具体思想大概如下:首先,将图的所有节点(我们假定总共有n个节点)分成两个集合,V和U。其中,集合V保存的是我们已经访问过的节点,集合U保存的是我们未曾访问的节点。prim算法第一步就是选定第一个节点放入集合V中(一般是第一个),然后查找V中节点和U中节点之间距离最小的那个路径,(假设U中节点w离V中的某个节点...原创 2019-12-01 23:45:21 · 705 阅读 · 0 评论 -
数据结构—二叉树的顺序存储结构
二叉树的顺序存储结构二叉树的顺序存储结构就是用一维数组存储二叉树中的节点,并且节点的存储位置(下标)应能体现节点之间的逻辑关系——父子关系。普通二叉树需按照完全二叉树的编号方式编号,然后以完全二叉树的形式存储到一维数组中,造成很多浪费,故二叉树的顺序存储结构一般仅存储完全二叉树.二叉树的链式存储表示二叉链表基本思想令二叉树的每个节点对应一个链表节点,链表节点除了存放与二叉树节点有关的数...原创 2019-11-24 22:15:27 · 3273 阅读 · 0 评论 -
数据结构—树和二叉树
二叉树定义二叉树是n(n≥0)个节点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根节点和两棵互不相交的、分别称为根节点的左子树和右子树的二叉树组成。特点:每个节点最多有两棵子树;二叉树是有序的,其次序不能任意颠倒特殊二叉树斜树1.所有节点都只有左子树的二叉树称为左斜树;2.所有节点都只有右子树的二叉树称为右斜树;3.左斜树和右斜树统称为斜树。4.在斜树中,每一层只...原创 2019-11-24 21:47:50 · 716 阅读 · 0 评论 -
数据结构—字符串和数组—GPA排名系统
GPA排名系统描述目前,高等院校往往采用GPA来评价学生的学术表现。传统的排名方式是求对每一个学生的平均成绩,以平均成绩作为依据进行排名。但这样的排名方法已经引起了教育界以及社会各界人士的争议,因为它存在着许多弊端。对于不同的课程,选课学生的平均成绩会不同程度地受到课程的难易程度和老师的严厉程度的制约。因而这样的排名系统无形中就鼓励了学生选择一些比较容易的课程,因为这样可以事半功倍地获得较高...原创 2019-11-24 21:15:17 · 292 阅读 · 0 评论 -
数据结构—字符串—模式匹配算法
模式匹配算法定义:设有主串S和子串t,子串的定位就是要在主串S中找到一个与子串t相等的子串。通常把主串S称作目标串,子串t称作模式串,因此定位也称作模式匹配。常用两种算法:1brute-force算法思路:主串标记指针每次移动一个位置,然后和子串比较,如何相等则返回当前主串指针的位置。上面算法的缺点:主串指针回溯,当与模式串部分匹配后,每次主指针只移动一个位置。2.kmp算法思路:分...原创 2019-11-24 21:10:03 · 514 阅读 · 0 评论 -
数据机构——字符串
字符串顾名思义就是将字符型的变量串成一个串,这个串可以是数组,也可以是链表等等简单介绍串:零个或多个字符组成的有限序列。串长度:串中所包含的字符个数。特殊的:空串的长度为0。其中顺序的字符串是用数组储存的,链接串是用链接存储结构来存储串。最简单的字符串就是用数组将字符存储起来。相对应的也有多维数组存储字符串并进行相关的操作其中,数组是由一组类型相同的数据元素构成的有序集合,每个元素受...原创 2019-11-18 23:01:12 · 110 阅读 · 0 评论 -
数据结构——括号匹配
括号匹配描述给定一个字符串,字符串只包含两种字符:左括号“(”和右括号”)”。请判断这些括号是否能匹配。如果能则输出Yes,不能则输出No。输入一行,括号序列(一个字符串)输出Yes/No样例输入((()))()()样例输出Yes#include<iostream>#include<stack>#define N 100using namespa...原创 2019-11-18 20:41:30 · 153 阅读 · 0 评论 -
数据机构——后缀表达式求值
后缀表达式求值描述输入一个后缀表达式,计算它的值。操作数和操作码之间都以空格分开。输入一行,后缀表达式输出一行,一个整数,为后缀表达式的值样例输入16 9 4 3 + * -样例输出-47#include<iostream>#include<stack>using namespace std;stack<int>S;int x=0;...原创 2019-11-18 20:39:10 · 259 阅读 · 0 评论 -
数据结构——火车站中驶出的火车
火车站中驶出的火车描述有编号从1到N的N辆火车等待进入车站,而车站的容量是有限的,需要对火车进行调度。只有两种调度指令,进站和出站。现在车站给出了M个指令,请你输出在完成这些调度指令后,车站中驶出火车编号。输入两行第一行两个整数,N和M第二行为M个为-1或者为1的整数,-1代表出站,1代表入站输出一行整数,为驶出车站的火车编号样例输入3 31 -1 1样例输出1#inc...原创 2019-11-18 20:37:18 · 599 阅读 · 0 评论 -
数据结构——周末舞会
周末舞会描述假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。规定每个舞曲能有一对跳舞者。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一个程序,模拟上述舞伴配对问题。输入两行第一行两个整数n和m,分别为两队的长度第二行一个整数k,表示舞曲的数目输出k行,每行两个整数n1和m1,表示配对的编号样...原创 2019-11-18 20:35:09 · 856 阅读 · 0 评论 -
数据结构——队列的基本操作
队列的基本操作输入若干个整数(小于50个),整数共有四种类型,不同类型的整数代表不同操作。说明如下:1、[10,99]之间的整数:将该整数入队。2、-1: 队首整数出队。3、-2: 显示队列所有整数。4、-3: 输入结束。输入第一行若干整数(必须满足上述四种类型要求),以-3结束。输出输出队列中所有整数。样例输入13 25 90 -1 12 -2 -1 45 78 30 -2...原创 2019-11-18 20:22:23 · 623 阅读 · 0 评论 -
数据结构-队列及其应用
队列的定义与应用和栈类似定义:队列:只允许在一端进行插入操作,而另一端进行删除操作的线性表。允许插入(也称入队、进队)的一端称为队尾,允许删除(也称出队)的一端称为队头。也就是说,队列在输入输出方面与栈有所不同,栈是单向的输入输出,在一个方向进,在同一个方向出。队列是在一头进,另一头出。其他的应用方面略有不同。队列的操作特性:先进先出比如在具体的操作方面:队列的基本操作:S.pu...原创 2019-11-18 20:19:37 · 821 阅读 · 0 评论 -
数据结构-栈及其应用
一 . 栈栈的逻辑结构 :限定仅在表尾进行插入和删除操作的线性表允许插入和删除的一端称为栈顶,另一端称为栈底。空栈是不含任何数据结构的栈 。1.栈的具体操作stack S //定义一个整型的数据栈Spush()//插入数据S.top()//取栈顶S.pop()/删除栈顶S.empty()//栈是否为空栈的具体应用–后缀表达式从左到右对后缀表达式字符串进行处理,每次处理一个符...原创 2019-11-03 12:59:53 · 459 阅读 · 0 评论 -
数据结构-线性表-循环链表,双向链表
一.循环列表将单链表或者双链表的头尾结点链接起来,就是一个循环链表。特点:首尾相接的链表。可以从任一节点出发,访问链表中的所有节点。判断循环链表中尾结点的特点:q->next==first1.循环列表的构建①头插法构建循环链表first=new Node; //生成头结点first->next=first;Node *s;for (int i=1; i&l...原创 2019-11-03 10:50:48 · 255 阅读 · 0 评论 -
数据结构-线性表-单链表
线性表的逻辑结构线性表的定义:是零个或多个具有相同类型的数据元素的有限序列。数据元素的个数定义为线性表的 长度 。长度等于零时称为空表,一个非空表通常记为 L = ( a 1 , a 2 ,……, a n )其中, a i ( 1 ≤ i ≤ n )称为数据元素,下标 i 表示该元素在线性表中的位置或序号, 称元素 a i 位于表的第 i 个位置,或称 a i 是表中的第 i 个...原创 2019-10-27 23:46:24 · 96 阅读 · 0 评论 -
数据结构绪论
数据结构的基本概念数据(Data):是对客观事物的符号表示,在计算机科学中是指能输入到计算机并被计算机程序处理的符号的总称。 数据一般可分为数值数据、文本数据、图形图像数据和音响数据等。数据元素(Data Element):是数据的基本单位,也可以称为结点,在计算机程序中通常作为一个整体进行考虑。 数据元素一般由若干数...原创 2019-10-27 16:24:05 · 74 阅读 · 0 评论