![](https://img-blog.csdnimg.cn/d206a4d68ae04e9093bbbf345104409e.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
文章平均质量分 92
记录学习数据结构与算法的过程
Eddyvv
一只菜鸟程序猿
展开
-
数据结构-图(图的定义、分类、基本术语和存储结构)
图图(Graph)是由莱昂哈德·欧拉1在1736年首先引进的一类很重要的非线性结构,可称为图形结构或网状结构。图的应用领域非常广泛,例如:电路分析、工程规划、化合物分类、统计力学、自动化、语言学等。一、图的定义图G由两个集合V、E构成,V是节点的有限非空集合,E是节点的二元组集合,节点二元组称为边。V(G)和E(G)分别称为图G的节点集(顶点集)与边集,也可用G=(V,E)表示图。线性表、树、图的差异在线性表中数据元素叫元素,在树中将数据元素叫结点,在图中数据元素称之为顶点(Vertex)原创 2020-10-18 22:07:14 · 4913 阅读 · 0 评论 -
数据结构-链表(判断链表是否有环)
如何判断链表是否有环方法1:采用快慢指针/**************************** * 函数名称:JudgmentLinkRing_1(PtrList list) * 功能描述:判断链表是否有环 * 传入参数:PtrList list 待判断的链表 * 返回值: true 有环 * false 无环 * 方法:比较快慢指针 ***************************/bool JudgmentLinkRing_1(PtrList原创 2020-10-07 19:54:09 · 310 阅读 · 0 评论 -
数据结构-树(树、森林和二叉树之间的转换)
树、森林和二叉树之间的转换计算机程序设计中,数据结构是非常重要的一环,它是对计算机内存、数据等内容的一种规划与安排,它对程序的可读性,扩展性以及是否健壮等方面有很大帮助。在数据结构中数组的搜索相对比较方便,通过下标直接可以进行选择,但删除或者插入某些元素就会比较麻烦。 链表与数组正好相反,它在删除和插入数据操作中很快,但是查找却比较慢。二叉树就既有链表的好处,也有数组的好处,在处理大批量的动态的数据是比较有用,所以一般会将一些无序树、森林等转换为二叉树进行数据处理相对比较方便。一、树转换为二叉树原创 2020-09-24 20:41:57 · 854 阅读 · 1 评论 -
数据结构-树(树的存储结构、二叉树、二叉树的遍历)
树的应用:操作系统的文件管理、操作系统目录管理、数据库系统的索引。原创 2020-08-28 22:00:30 · 969 阅读 · 0 评论 -
数据结构-字符串(BF算法、KMP算法)
串串(String)是计算机信息处理中最常见的一种数据结构,是有限的字符序列,记作S = “a1a2a3…an”其中S是串名,双引号之间的字符序列为串的值,双引号是串的分界符,并不是串的成分。其中“ai(1<=i<n)是程序设计语言的”...原创 2020-08-21 21:21:23 · 587 阅读 · 0 评论 -
数据结构-递归(汉诺塔、斐波那契数列)
递归递归(英语:Recursion),又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。递归一词还较常用于描述以自相似方法重复事物的过程。例如,当两面镜子相互之间近似平行时,镜中嵌套的图像是以无限递归的形式出现的。也可以理解为自我复制的过程。例子:汉诺塔汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱原创 2020-08-04 22:16:30 · 1341 阅读 · 0 评论 -
数据结构-二分查找(迭代与递归实现)
二分查找在计算机科学中,二分查找算法(英语:binary search algorithm),也称折半搜索算法(英语:half-interval search algorithm)对数搜索算法(英语:logarithmic search algorithm),是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某原创 2020-08-04 17:29:00 · 1430 阅读 · 0 评论 -
数据结构-栈的应用(栈实现中缀表达式转后缀表达式)
中缀表达式转后缀表达式三种常见的表达式前缀表达式(prefix):前缀表达式是一种没有括号的算术表达式,与中缀表达式不同的是,其将运算符写在前面,操作数写在后面。为纪念其发明者波兰数学家Jan Lukasiewicz,前缀表达式也称为“波兰式”。例如,- 1 + 2 3,它等价于1-(2+3)。中缀表达式(infix):(或中缀记法)是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(例:3 + 4),中缀表达式是人们常用的算术表示方法。后缀表达式(p原创 2020-08-03 20:00:26 · 240 阅读 · 0 评论 -
数据结构-队列(队列的基本操作)
队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。...原创 2020-08-02 16:26:07 · 2053 阅读 · 0 评论 -
数据结构-栈(栈的C语言实现)
栈栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。一、顺序栈顺序栈是栈的顺序实现。顺序栈是指利用顺序存储结构实现的栈。采用地址连续的存储空间(数组)依次存储栈中的数据元素,由于入栈和出栈运算都是在栈顶进行,而栈底位置是固定不变的,可以将栈底位置设置在数组空间的起始处;栈顶位置是随入栈和出栈操作而变化的,故需用一个整型变量top来记录原创 2020-08-01 20:37:27 · 2480 阅读 · 0 评论 -
魔术师发牌问题、拉丁方阵问题循环链表实现
魔术师发牌问题问题描述:魔术师利用一副普通的扑克牌中的13张黑桃,预先将他们排好后叠放在一起,牌面朝下,对观众说:“我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?现场演示。”一开始,魔术师数1,然后把最上面的那张牌翻过来,是黑桃A;然后将其放到桌面上;第二次,魔术师数1、2;将第一张牌放到手中未翻过的扑克牌的最下面,将第二张牌翻转过来,正好是黑桃2;第三次,魔术师数1、2、3;将第1、2张牌依次放到手中未翻过的扑克牌的最下面,将第三张牌翻过来正好是黑桃3;……直到将所有的牌都翻出原创 2020-07-29 22:25:02 · 206 阅读 · 0 评论 -
数据结构-静态链表(初始化、插入、删除等基本操作)
静态链表一、简介用数组代替指针或引用来描述单链表,即用数组描述的链表叫做静态链表,这种描述方法叫做游标实现法。静态链表结构游标6234507…1数据-ABCDE-…-下标0123456…MAX-1静态链表需要对数组的第一个和最后一个元素作为特殊元素处理,不存数据。通常把未被使用的数组元素称为备用链表。而数组第一个元素,即下标为0的元素的cur就存放备用链表的第一个结点的下标;而数组的最后一个元素的cur则存放第原创 2020-07-27 20:25:37 · 3282 阅读 · 3 评论 -
约瑟夫问题实现
约瑟夫问题的由来据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。通过上面的问题描述可以将原创 2020-07-26 17:56:25 · 206 阅读 · 0 评论 -
数据结构-单向循环链表(初始化、插入结点、删除结点等操作)
单向循环链表单向循环链表:将单向链表的最后一个结点指向头结点形成一个环,即成为单向循环链表,可以通过其中任意一个结点出发访问到其他结点。单向循环链表的操作方法与单向链表相似,只是在于循环条件存在差异。特点:若链表为空,则头结点的next结点还是指向其本身,即head ->next=head;尾节点的next指针指向head结点,即头尾相连;通过判断当前结点的next结点是否与head结点相等,即可判断是否对单向循环链表遍历完成;循环链表无须增加存储量,仅对单向链表的链接方式稍作改变,即原创 2020-07-24 20:46:43 · 6438 阅读 · 2 评论 -
数据结构-单向链表(初始化、插入、删除等基本操作)
单向链表单向链表(又名单链表、线性链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过从头部开始,依序往下读取。单向链表存在头节点,且头节点不保存数据宏定义及函数声明//定义处理的数据类型typedef int ElemType;#define bool int//定义状态typedef enum Status{ success, fail, fatal, rang_err}Status;//定义数据类型的结构typedef struct Nod原创 2020-07-23 20:17:01 · 786 阅读 · 0 评论