![](https://img-blog.csdnimg.cn/20190904163433627.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
文章平均质量分 88
数据结构严蔚敏C语言版
da1234cao
在安全领域生根发芽
展开
-
检查数中是否存在重复出现的数字(bool类型)
博客参考《C语言程序设计————现代方法》题目:检查数中是否存在重复出现的数字思路:创建一个长度为10的bool型数组。采用映射(桶)的思想。程序://c程序:检查数,是否有出现多于一次的数字#include<stdbool.h>#include<stdio.h>int main(void){ bool dig_seen[10]={false};...原创 2019-06-06 21:12:03 · 2661 阅读 · 0 评论 -
矩阵链乘
题目: 输入n个矩阵的维度和一些矩阵的链乘表达式,输出乘法的次数。如果乘法无法进行,输出error。假定A是m*n矩阵,B是n*p的矩阵,那么A*B是m*p的矩阵,乘法次数为m*n*p。如果A的列数不等于B的行数,则乘法无法进行。 例如,A是50*10的,B是10*20的,C是20*5的,则(A(BC))的乘法次数为10*20*5(BC的乘法次数)+50*10*5=35...原创 2018-09-27 10:38:39 · 1709 阅读 · 0 评论 -
随机步法(C99标准中二维数组的初始化)
本博客,阅读书籍:《c语言程序设计————现代方法》知识点:C99标准中二维数组的初始化方法。rand()和srand()的使用。1 二维数组的初始化详细介绍参考:《c语言程序设计————现代方法》文章介绍参考:数组初始化我简单介绍下:int a[8]={0,0,2,0,3,0,0,8};//常规初始化int a[8]={[2]=2,[4]=3,[7]=8};//C99初始...原创 2019-06-07 15:32:06 · 1504 阅读 · 1 评论 -
LCS(longest common subsequence)(最长公共子序列)算法(模板)
看了几分写的相当好的博客:介绍:程序员编程艺术第十一章:最长公共子序列(LCS)问题表格展示:LCS算法(最长公共子序列问题)代码: 算法导论-动态规划(最长公共子序列问题LCS)-C++实现 C++实现——LCS-最大公共子串长度 下面内容来转载自上面文章 问题描述什么是最长公共子序列呢?好比一个数列 S,如果分别是两个或多个已知数列的...转载 2018-10-21 18:16:40 · 3464 阅读 · 0 评论 -
排序算法——选择排序(简单选择排序&&堆排序)
简单选择排序:转载:简单选择排序(直接选择排序)【基本思想】 每一趟从待排序的数据元素中选出最小(最大)的元素,顺序放在待排序的数列最前,直到全部待排序的数据元素全部排完。【特点】 数据结构:数组 稳定性:不稳定【过程】 初始关键字:『 8,5,2,6,9,3,1,4,0,7 』 第一趟排序后:0,『5,2,6,9,3,1,4,8,7』 第二趟排序后:0,1,『...转载 2018-10-14 22:03:43 · 1001 阅读 · 0 评论 -
01背包问题
转载:https://blog.csdn.net/xp731574722/article/details/707668040-1 背包问题:给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi 。问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?分析一波,面对每个物品,我们只有选择拿取或者不拿两种选择,不能选择装入某物品的一部分,也不能装...转载 2018-10-14 11:51:41 · 204 阅读 · 0 评论 -
排序算法——归并排序
原文写的很好,很好,转载下。转载:https://blog.csdn.net/morewindows/article/details/6678165/归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数...转载 2018-10-14 22:40:04 · 250 阅读 · 0 评论 -
排序算法——插入排序
直接插入排序最简单的排序方法。它的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录增1的有序表。把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素;排序过程即每次从无序表中取出第一个元素,将它插入到有序表中,使之成为新的有序表,重复n-1次完成整个排序过程。——————————那一季的银杏叶:https://www....原创 2018-10-07 11:58:23 · 283 阅读 · 0 评论 -
欧几里得算法的应用
场景一:经典问题----倒水(详细解析)倒水问题解析 有两个容器,容积分别为A升和B升,有无限多的水,现在需要C升水。 我们还有一个足够大的水缸,足够容纳C升水。起初它是空的,我们只能往水缸里倒入水,而不能倒出。 可以进行的操作是: 把一个容器灌满; 把一个容器清空(容器里剩余的水全部倒掉,或者倒入水缸); 用一个容器的水倒入另外一个容器,直到倒出水的容器空或者倒入水的容器满。 ...转载 2018-10-09 22:42:53 · 2889 阅读 · 2 评论 -
最快过桥问题
转载:经典过桥问题证明 在漆黑的夜里,四位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,四个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,四人所需要的时间分别是1、2、5、8分钟;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是,如何设计一个方案,让这四人尽快过桥...转载 2018-10-23 22:44:40 · 1686 阅读 · 0 评论 -
全排列算法
一、递归法引用:https://www.cnblogs.com/mengfanrong/p/3854044.html比如,假设集合是{a,b,c},那么这个集合中元素的全部排列是{(a,b,c),(a,c,b),(b,a,c),(b,c,a),(c,a,b),(c,b,a)},显然,给定n个元素共同拥有n!种不同的排列,假设给定集合是{a,b,c,d},能够用以下给出的简单算法产生其全部...原创 2018-09-04 21:40:17 · 5920 阅读 · 1 评论 -
分治法生成格雷码
1、格雷码的介绍格雷码 百度百科2、找规律的方式,产生格雷码代码来源:构造Gray码的分治算法#include "iostream"#include "cmath"using namespace std;const int N=10;int arr[N*N][N]; //arr[i][j]表示第i个格雷码的第j位//构造b位格雷码//a为格雷码的个数void gray(i...原创 2019-06-24 19:58:30 · 4845 阅读 · 5 评论 -
贪心算法区间问题——选择不想交区间
选择不想交的区间。数轴上有n个区间(ai,bi)。选择尽可能多个区间,使得这些区间没有公共点。分析: 首先明确一个问题:假设有两个区间x,y,区间x完全包含y。那么,选x是不划算的,因为x和y最多选一个,选x不如选y,这样区间数目不会减少,而且给其他区间留下更多的位置。接下来,按照bi从小大大的顺序给区间排序。贪心算法策略是:一定要选第一个区间。为什么呢? 现在...原创 2018-10-03 23:41:23 · 1104 阅读 · 0 评论 -
欧几里德算法
原文转载:博主——AdemJensenhttps://blog.csdn.net/rentenglong2012/article/details/68944518写得很好 欧几里德算法 定义 求法推演 编程实现 CPP代码递归 CPP代码迭代 扩展欧几里德算法 定义 算法推演 推演方式1 考虑情况1 考虑情况2 考...转载 2018-10-09 22:25:06 · 582 阅读 · 0 评论 -
图像压缩---动态规划
全面的了解,看书《算法设计分析》曲婉婷网上看到的不满意,而且TraceBack的时候,采用的大都是递归。1 算法与思路描述转载自:动态规划之–图像压缩1.1问题描述图像压缩的问题我们是这样理解的:大家都知道计算机的图像是用灰度值序列来表示的{P1,P2…Pn},其中Pi表示像素点i的灰度值。而通常灰度值的范围是0~255,因此需要8位二进制数来表示一个像素。这个时候大家应该有了一些小的...原创 2019-06-26 20:26:05 · 7097 阅读 · 1 评论 -
静态霍夫曼编码(Huffman Coding)
转载:https://blog.csdn.net/xgf415/article/details/52628073/霍夫曼编码(Huffman Coding)是一种编码方法,霍夫曼编码是可变字长编码(VLC)的一种。霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机率的方法得到的,出现机率高的字母使用较短的编码,反之出现机率低的则使用较...转载 2018-10-04 15:45:49 · 3999 阅读 · 1 评论 -
排序算法——交换排序
冒泡排序:转载:冒泡排序(百度百科)冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序...转载 2018-10-14 19:08:18 · 390 阅读 · 0 评论 -
完全背包问题
完全背包问题跟01背包的区别是01背包每个物品只能选一次,总共就这几个。而完全背包问题是每个物品可以无限选,只要装得下。可以看成是有几种物品,每种都无限多个。 可以在01背包的基础上进行改动:总结——01背包问题 (动态规划算法) 01背包在选第i个物品时,容积够用情况下,只有2种状态可选,放还是不放,找出最大价值的选择。而完全背包在选第i种物品时,容积够用情况下,可能有2...原创 2018-10-14 12:01:30 · 598 阅读 · 0 评论 -
无向图的动态规划——硬币问题
题目描述:硬币找零问题描述:现存在一堆面值为 V1、V2、V3 … 个单位的硬币问最多和最少需要多少个硬币才能找出总值为T个单位的零钱?输入:第一行为n,T,表示硬币个数,需要凑的面额,第二行有n个数,表示硬币的面额输出:一行,分别为最大最小的数目,用空格分开示例:输入 5 631、2、5、21、25输出 63 3解题思路:运用动态规划,将 Max【T】和Min【T】用来...原创 2018-10-11 20:42:39 · 795 阅读 · 4 评论 -
贪心算法——区间覆盖问题
区间覆盖问题数轴上有n个闭区间[ai,bi],选择尽量少的区间覆盖一条指定的线段[s,t]。分析: 把各区间按照a从小到大排序。如果区间1的起点不是s,无解,否则起点在s的最长区间。选择[ai,bi]后,新的起点设置成bi。直至覆盖整个线段。 输入:N:测试数据组数begin,end:要覆盖区间的起始和终止点n:区间数。后面跟随n个区间 ...原创 2018-10-04 00:11:16 · 19652 阅读 · 1 评论 -
贪心算法——区间选点问题
转载:https://blog.csdn.net/xia842655187/article/details/51944763区间选点的问题大致可以描述为:给定N个区间[a,b],取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以重复)。关于贪心算法的验证过程就不再赘述,现在思考一下贪心策略的制定。对于区间[a1, b1] 、[a2, b2]、 [a3, b3] 来说,...转载 2018-10-03 23:50:52 · 4050 阅读 · 4 评论 -
散列表
介绍了三种散列函数,用以完成映射:除法散列法、乘法散列法、全域散列法。介绍了两种冲突解决办法:链表法、开放寻址法。原创 2020-12-30 18:07:58 · 248 阅读 · 0 评论 -
动态规划——数字三角形
原文转载:https://blog.csdn.net/zwhlxl/article/details/46225947作者:zengwh513题目描述 Description下图给出了一个数字三角形,请编写一个程序,计算从顶至底的某处的一条路径,使该路径所经过的数字的总和最大。(1)每一步可沿左斜线向下或右斜线向下(2)1 < 三角形行数 < 100(3)三角形数字为0...转载 2018-10-09 15:28:03 · 1305 阅读 · 0 评论 -
判断是否为可能的出栈情况&&打印所有的出栈可能
题目:https://blog.csdn.net/dextrad_ihacker/article/details/50083845PopPush城市有一座著名的火车站。这个国家到处都是丘陵。而这个火车站是建于上一个世纪。不幸的是,那时的资金有限。所以只能建立起一条路面铁轨。而且,这导致这个火车站在同一个时刻只能一个轨道投入使用,因为它缺少空间,两列火车将无路可走。具体看下图。当地的惯...原创 2018-09-26 21:36:25 · 1381 阅读 · 0 评论 -
链表实现多项式相加
全文参看:这里写链接内容 一、题目要求 使用链表实现多项式的相加,最终输出相加的多项式。默认链表的指数为递增。输入时依次输入系数和指数,以0 0 作为结束标志。 比如: 多项式A:1+2*x-4*x^4 多项式B:2-2*x+5^x^4输入: 0 1 2 1 -4 4 0 0 2 0 -2 1 5 4 0 0输出:3-4*x^3+5转载 2018-01-29 20:15:43 · 5315 阅读 · 0 评论 -
简单的动态链表
题目:用动态链表输入三个学生的学号和成绩,并输出第一位学生的信息(c语言程序设计P313)#include#include#define LEN sizeof(struct student)struct student { long num; float score; struct student * next;//这里是指向结构体的指针,同时其也是结构体的一部分。对于新建的原创 2017-09-15 22:34:31 · 553 阅读 · 0 评论 -
单链表,双向链表节点的删除
一、单链表图片来源:点击打开链接#include#includetypedef struct Node{ int elem; struct Node *next;}node;node *write(){ int temp; node *head,*p,*q; head=(node *)malloc(sizeof(node)); p=head;//这里给头结点起原创 2018-01-29 16:39:05 · 12668 阅读 · 1 评论 -
合并两个有序表
题目:两串数字有序,分别用顺序表和链表的方式,将两串数字合并。一、顺序表思路: 如有有序表A,B: A:1 2 4 5 5 B:2 3 3 6 71.一开始 i 指向 A的开头元素(即1),同理 j 指向 B开头元素(2)2.A[i] 和 B[j] 中对比,选较小的放入新表C中 #include#include#define LIST_INIT_S原创 2018-01-28 21:48:22 · 5344 阅读 · 0 评论 -
栈实现运算表达式的求解
一、题目 用栈实现运算表达式的求解。方法:通常称为“算符优先法”。 输入:(5+3*(4+1))/5# //注:默认输入正确,多个回车都不行,回车也是字符,括号用英文输入 输出:4二、题目分析 任何一个表达式,都有操作数,运算符,界限符组成。操作数一般为常量。运算符可以分为算术运算符,关系运算符和逻辑运算符。基本界限符有左右括号和表达式结束符组成。这里为了原创 2018-02-02 22:14:22 · 5200 阅读 · 1 评论 -
迷宫求解——栈的实现
一、题目及分析 求迷宫中从入口到出口的所有路径是一个经典的程序设计问题。由于计算机解决迷宫问题时,通常用的是“穷举求解”的方法,即从口出发,顺某方向向前探索,若能走通,则继续往前走;否则沿原入口路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。为了保证在任何位置上都能沿原路退回,显然需要用一个后进先出的结构来保存从入口到当前位置的路径。因此,在求迷宫通路的算法中应用“栈”。也就是自原创 2018-02-02 10:37:17 · 5144 阅读 · 7 评论 -
通过栈实现进制的转换
数制转换 十进制数N和其他d进制数的转换是计算机实现计算的基本问题,其解决方法很多,其中一个简单算法基于下列原理: N=( n div d)×d+N mod d(其中:div为整除运算,mod为求余运算) 例如:(1348)10=(2504)8,其运算过程如下:略。一、题目及分析’ 假设现要编制一个满足下列要求的程序:对于输入的任意一个非负十进制整数输出与其等值的八进制数。由于原创 2018-02-02 09:13:52 · 4307 阅读 · 0 评论 -
链表的插入
1.设顺序表A中的数据元素递增有序,试写一程序,将x插入到顺序表的适当位置上,使该表仍然有序。#include#include typedef struct node { int a; struct node *link; }node,*nodelink; struct node *creatlink()//创建一个含有10个节点的链表 { int i;原创 2017-11-08 23:21:53 · 360 阅读 · 0 评论 -
一元多项式相乘链表的实现
一、题目将两个一元多项式相乘,最后将相乘的结果输出。一元多项式指数默认递增。输入时依次输入每项系数和指数。比如: 多项式A:1+2*x-4*x^4 多项式B:2-2*x+5^x^4输入: 0 1 2 1 -4 4 0 0 2 0 -2 1 5 4 0 0输出:2+2*x+13*x^5+20*x^8二、题目分析首先得会一元多项式的相加:点击打开原创 2018-01-30 11:15:46 · 4101 阅读 · 4 评论 -
hanoi塔问题的递归实现
一、背景故事法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另...原创 2018-02-11 11:03:36 · 2699 阅读 · 0 评论 -
图的矩阵存储——嵌套矩阵——记忆化搜索搜索
转载:https://www.cnblogs.com/mu-ye/p/7739935.html题意:有n个矩阵,每个矩阵可以用两个整数a、b描述,表示它的长和宽。矩阵X(a,b)可以嵌套在矩形Y(c,d)中,当且仅当a<c,b<d,或者b<c,a<d。输出最多嵌套的矩阵个数。思路: 如果矩阵X可以被Y嵌套,则相当于X到Y有一条路径,问题就转化成了在...转载 2018-10-10 11:41:38 · 296 阅读 · 0 评论 -
顺序栈
栈: 限定仅在表尾进行插入和删除操作的线性表。因此,对于栈来说,表尾有其特殊含义,称为栈顶,相应地,表头称为栈底。不含元素的空表称为空栈。 栈是一种“后进先出”的线性表,有压栈出栈两种操作方式。如下图: 栈的表现形式有链栈和顺序栈。这里只提及顺序栈。顺序栈的存储需要注意:非空栈中的栈顶指针始终在栈顶元素的下一个位置。typedef str...原创 2018-11-01 20:16:12 · 238 阅读 · 0 评论 -
队列——链队列和循环队列
链队列转载:https://www.cnblogs.com/muzijie/p/5655228.html1 链队列的存储结构 将对头指针front指向链队列的头结点,队尾指针rear指向终端结点。空队列时,头指针front和尾指针rear都指向头结点。 链队列的存储结构为:typedef int QElemType;typedef struct QNode...转载 2018-11-03 16:02:15 · 8739 阅读 · 0 评论 -
移动盒子——双向链表
移动盒子UVa 12657你有一行盒子,从左到右依次编号为1,2,3,…,n。可以执行以下4种指令:1 x y:表示把盒子x移动到盒子y的左边(如果x已经在y的左边则忽略此指令)。2 x y:表示把盒子x移动到盒子y的右边(如果x已经在y的右边则忽略此指令)。3 x y:表示交换盒子x和y的位置。4:表示反转整条链。指令保证合法,即x不等于y。例如当n=6时在初始状态盒子序列...原创 2018-10-29 22:32:02 · 708 阅读 · 0 评论 -
静态链表——集合运算(A-B)U(B-A)
来源:严蔚敏《数据结构》(书上讲的很清楚)先介绍静态链表,再以例题的形式展示。 静态链表的存储结构#define maxn 15struct space{ int cur; int key; }s[maxn];这种描述方便在于,不设“指针”类型的高级程序设计语言中使用链表结构。在上面的结构中,一个分量表示一个节点,同时用游标cur代替指针指示节点在数组中的位置...原创 2018-10-28 16:59:04 · 3546 阅读 · 6 评论 -
字典树模板及例题
转载:Trie树的常见应用大总结(面试+附代码实现)(一)Trie的简介Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树。他的核心思想是空间换时间,空间消耗大但是插入和查询有着很优秀的时间复杂度。(二)Trie的定义Trie树的键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子...转载 2018-10-21 12:15:41 · 2698 阅读 · 0 评论