数据结构与算法分析
文章平均质量分 65
@@老胡
思考与实践并行,努力成为发现和解决问题的人
展开
-
C 怎么用c语言的函数指针实现封装、继承和多态
封装是把一个抽象的事物的属性以及对应的操作打包到一个类中,通过内部的方法来改变内部的状态,封装的本质是在隐藏信息,使得对象内部的状态不轻易被外界访问和利用。具有不同的功能的函数可以使用同一个函数名,从而实现一个函数名调用不同的功能函数。继承是基于一个已有的类(父类),再创建一个新的类(子类),新的类可以访问父类的属性和动作,从而避免重复编写代码。子类可以有自己的属性。定义一个human的结构体,结构体具有两个属性为age和sex,有两组方法,分别为设置输入与获取的方法。原创 2023-11-06 17:38:25 · 330 阅读 · 1 评论 -
算法流程图怎么画
也叫算法执行框,表示对数据的处理和执行,可以对数据进行赋值或者计算,对数据进行赋值的时候,箭头指向被赋值的对象。算法流程图可以用来描述算法执行流程,对算法进行查漏补缺,一般算法流程图由框和流程线组成。算法起止框是不可或缺的,一般为圆角矩形,表示算法的开始或者结束。算法流程图中使用平行四边形表示算法的输入和输出。算法流程图中一般使用菱形表示条件的判断。原创 2023-04-19 23:20:53 · 1730 阅读 · 0 评论 -
数据结构第六章图部分知识点
Get_edge_value(G, x, y):获取图 G 中边 (x, y) 或 对应的权值Set_edge_value(G, x, y, v):设置图 G 中边 (x, y) 或 对应的权值v。原创 2022-09-17 15:00:11 · 470 阅读 · 0 评论 -
数据结构应用题第五章树代码c
数据结构应用题第五章树代码c。原创 2022-09-07 11:17:53 · 450 阅读 · 0 评论 -
数据结构第五章树部分代码c
比如当前树的根节点(假设为A)被访问,当这个A被访问且左子树被修改为其前向结点时(也即是说A的左子树本来为NULL,然后被修改,假设其前向指针为O,就会被修改为O),按照先序遍历的逻辑是接下来会访问根节点A的左子树,访问时就会发现其左子树是当前节点的前向结点O(本来是NULL然后被修改了),程序会跳转到O,然后O访问完又跳转到A出现死循环问题,俗称“爱的魔力转圈圈”问题。字符表示NULL,表示结束,并且使用的是先序法创建一个树,也即是说,输入的字符顺序和先序法获得的结点顺序是一致的。原创 2022-09-04 09:14:13 · 348 阅读 · 0 评论 -
数据结构第四章字符串部分代码c
所以这一部分除了KMP没有可看性,但是这里的KMP只有代码无思路,非大佬可以看懂,所以这一文章除非要copy KMP代码,否则没有可看性,慢走不送。在c语言中虽然没有明确的string类型,而是用char[]来表征字符串,但是却有字符串相关的一些库函数。找个视频看思路吧,看代码看不懂的,单纯一个数学题写成的一个代码。原创 2022-08-23 11:37:31 · 359 阅读 · 0 评论 -
数据结构应用题第三章栈和队列代码c
遇到有括号,出栈匹配,同一类型括号且左右括号匹配成功,其他失败。全部匹配成功且栈为空,匹配成功。思路:遇到左括号入栈。原创 2022-08-19 10:40:28 · 581 阅读 · 2 评论 -
数据结构 栈和队列部分代码c
栈在括号匹配中的应用其实不仅仅是局限在括号匹配,对于常遇到的检验对称性的数据,都可以使用类似的思路去实现,比如检验回文序列等,在不同的应用中会有不同的表达,但是总体都是一个思路。,这个表示top指向下一个可以存储数据的位置,如果初始条件是这种,那么对于push和pop的实现过程(先改变top还是先存取数据)和原本的实现刚好相反。使用不带头结点的单链表来实现链式栈,对应的push就是头插法建立单链表,pop操作就是逐个删除头结点,和单链表的实现没有区别。,总之无论是什么方案,至少都需要花费一定的空间的代价。.原创 2022-08-18 11:45:45 · 201 阅读 · 0 评论 -
数据结构应用题第二章线性表代码
个人学习原创 2022-08-14 09:16:49 · 193 阅读 · 0 评论 -
数据结构 线性表部分代码(c)
数据结构线性表部分代码,无输出,不友好版本,仅个人学习原创 2022-08-10 09:31:31 · 345 阅读 · 0 评论 -
二叉树刷题学习笔记2
上一篇:二叉树刷题学习笔记1——框架文章目录二叉树的重要性二叉树的重要性上一篇章有说到二叉树刷题的两个思路:遍历和分解,而这两个思路,其实就是回溯算法和动态规划的思想。这次我们换一种说法:学过数据结构都知道快速排序和归并排序两种经典的排序算法,实际上,这两种排序的实现思想和框架和二叉树的思想框架大同小异。...原创 2022-04-05 23:24:10 · 602 阅读 · 0 评论 -
十大经典排序算法:快速排序和归并排序
文章目录快速排序排序流程排序步骤排序演示框架完整代码归并排序分治快速排序快速排序:说白就是找一个基准的值,使得左边的值都小于基准值,右边的值都大于基准值,然后可以分别对左边和右边的按照上面的步骤再排序,当左右两边都排好序之后,整个数组也就完成排序了。排序流程快速排序算法通过多次比较和交换来实现排序,其排序流程如下:首先设定一个分界值,通过该分界值将数组分成左右两部分。将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于分界值,而右边部分中各原创 2022-04-01 14:32:47 · 517 阅读 · 0 评论 -
二叉树刷题学习笔记1——框架
目录对数据的遍历无非就是顺序遍历或者递归遍历,遍历的对象无非也就是数组和链表,一般来说,我们遍历数据有一下框架:/* 迭代遍历数组 */void traverse(int[] arr) { for (int i = 0; i < arr.length; i++) { }}/* 递归遍历数组 */void traverse(int[] arr, int i) { if (i == arr.length) { return; }原创 2022-03-24 20:35:26 · 758 阅读 · 0 评论 -
数据结构与算法——树
目录原创 2022-03-23 20:20:24 · 1373 阅读 · 0 评论 -
算法与数据结构
数据结构:定义了数据是怎么存储的,才能更方便后面的算法的实现算法:真正的实现项目的要求联系:好的数据结构可以使得算法更加简便,易于维护原创 2021-03-30 13:17:05 · 85 阅读 · 0 评论 -
分治算法 例题
分治算法的基本思想:将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2package nunber2;原创 2021-03-24 23:48:10 · 935 阅读 · 1 评论 -
贪心算法 例题
贪心算法:只考虑当前的情况,考虑局部的最优解,并不考虑全局的结构给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是原创 2021-03-22 20:54:19 · 166 阅读 · 0 评论 -
蛮力算法 例题
这个算法比较简单给你一个数组 prices ,其中 prices[i] 是商店里第 i 件商品的价格。商店里正在进行促销活动,如果你要买第 i 件商品,那么你可以得到与 prices[j] 相等的折扣,其中 j 是满足 j > i 且 prices[j] <= prices[i] 的 最小下标 ,如果没有满足条件的 j ,你将没有任何折扣。请你返回一个数组,数组中第 i 个元素是折扣后你购买商品 i 最终需要支付的价格。示例 1:输入:prices = [8,4,6,2,3]输出:原创 2021-03-22 20:38:12 · 1094 阅读 · 0 评论 -
回溯算法 例题
问题描述某市市长获得了若干批口罩,每一批口罩的数目如下:(如果你把以下文字复制到文本文件中,请务必检查复制的内容是否与文档中的一致。在试题目 录下有一文件 mask.txt,内容与下面的文本相同)9090400 8499400 5926800 8547000 4958200 4422600 5751200 41756006309600 5865200 6604400 4635000 10663400 8087200 4554000现在市长要把口罩分配给市内的 2 所医院。由于物流限制,每一批口罩只.原创 2021-03-21 15:32:07 · 151 阅读 · 1 评论 -
斐波那契数列
从第3项开始,每一项都等于前两项之和。在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*),现在用代码形式表示出来:package nunber2;//狱史问题import java.util.Iterator;import java.util.Scanner;public class Demo1 { public static void main(String[] args) { Scanne原创 2020-09-12 10:49:26 · 354 阅读 · 0 评论 -
狱史问题
问题描述:某王国对囚犯进行大赦,让一狱吏n次通过一排锁着的n间牢房,每通过一次按所定规则转动门锁,每转动一次,原来锁着的被打开,原来打开的被锁上;通过n次后,门锁开着的,牢房中的犯人放出,否则犯人不得获释.转动门锁的规则是这样的,第一次通过牢房,要转动每一把门锁,即把全部锁打开;第二次通过牢房时,从第二间开始转动,每隔一间转动一次;第k次通过牢房,从第k间开始转动,每隔k-1 间转动一次;问通过n次后,那些牢房的锁仍然是打开的?package nunber2;//狱史问题import java.ut原创 2020-09-12 10:06:21 · 742 阅读 · 0 评论