![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
c-数据结构与算法
文章平均质量分 77
数据结构与算法
Weightlessly
坚持输出
展开
-
数据结构-队列(考研篇)
队列定义队列是只允许再一端进行插入,在另一端删除的线性表。从队尾插入,对头删除。特点:先进先出(FIFO)基本操作顺序存储将sq->rear++替换为(sq->rear+1)%MAXSIZE可以最大程度利用空间判断队列是否满:注意不能用sq->rear==sq->front来表示队列满,因为队列为空也可以用sq->rear==sq->front表示,所以为了区分二者我们牺牲一个存储单元来确保顺序队列是满的状态。即((sq->rear+1)%MAX原创 2022-02-19 22:57:00 · 365 阅读 · 0 评论 -
数据结构-栈(考研篇)
栈定义栈是只允许在一端进行插入或删除的线性表特点:后进先出(LIFO)PS:逻辑结构:与普通线性表相同数据的运算:插入、删除操作有区别基本操作n个不同元素进栈,出栈元素不同的排列个数为:顺序栈(数组)如果是top指向下一个将要插入的结点的存储位置,则push操作先插入再top++如果是top表示当前栈顶元素,则先top++再插入下例是第一种情况:#include <stdio.h>#include <stdlib.h>#define MA原创 2022-02-19 22:55:28 · 463 阅读 · 0 评论 -
数据结构-线性表(考研篇)
线性表定义具有相同数据类型的n个数据元素的有限序列(有次序)几个概念:ai是线性表中“第i个”元素线性表中的位序a1是表头元素,an是表尾元素除第一个元素外,每个元素有且仅有一个直接前驱。除最后一个元素外,每个元素有且仅有一个直接后继。基本运算顺序存储(顺序表)定义:用顺序存储的方式实现的线性表。顺序存储:逻辑上相邻的元素存储在物理位置上也相邻的存储单元中。如何计算一个数据元素的大小?答:C语言中的sizeof(** **)函数静态分配#include <stdi原创 2022-01-29 16:58:03 · 1464 阅读 · 0 评论 -
数据结构-绪论(考研篇)
绪论数据结构基本概念数据:描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据元素:数据的基本单位。一个数据元素可由若干个数据项组成。结构:各个元素之间的关系数据结构:相互之间存在一种或多种特定关系的数据元素的集合数据对象:具有相同性质的数据元素的集合。数据类型:一个值的集合和定义在集合上的一组操作的总称原子类型:值不可再分结构类型:值可以再分解为若干成分(分量)的数据类型抽象数据类型ADT:抽象数据组织及与之相关的操作。ADT用数学化的语言定义原创 2022-01-26 23:32:28 · 1259 阅读 · 0 评论 -
旅行商问题【回溯】(C语言)
旅行商问题【回溯】(C语言)给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路。可以看出abcdea这条线路是最短的。我们把abcde抽象为12345进行算法设计。有两种思路:固定起点和不固定起点。固定起点代码#include <stdio.h>#include <stdlib.h>#define MAXSIZE 10#define FINITY 1000int thingnum; //节点数int bian;//边个数int原创 2021-12-08 22:39:49 · 4791 阅读 · 4 评论 -
01背包/图的m着色/n后问题【回溯】(C语言)
01背包/图的m着色/n后问题【回溯】(C语言)有n 个物品,它们有各自的重量和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和。代码#include <stdio.h>#include <stdlib.h>#define MAXSIZE 10int max = 0;int maxx[MAXSIZE];int x[MAXSIZE];int w[MAXSIZE] = {0,2,20,5,10,5};int v[MAXSIZE] = {0,8,原创 2021-12-01 21:23:01 · 909 阅读 · 0 评论 -
最小生成树(C语言)
最小生成树问题(C语言)所谓一个 带权图 的最小生成树,就是原图中边的权值最小的生成树 ,所谓最小是指边的权值之和小于或者等于其它生成树的边的权值之和。kruskal克鲁斯卡尔算法(Kruskal)是一种使用贪婪方法的最小生成树算法。 该算法初始将图视为森林,图中的每一个顶点视为一棵单独的树。 一棵树只与它的邻接顶点中权值最小且不违反最小生成树属性(不构成环)的树之间建立连边。注意:一定要先排序!!代码#include <stdio.h>#include <stdlib.原创 2021-12-01 15:40:53 · 5100 阅读 · 0 评论 -
序列比对问题(C语言)
序列比对问题(C语言)问题描述输入:两个序列A和B,其长度分别为m和n输出:A和B的一种比对形式,其满足惩罚函数f(A,B)值最小。(1) 对A和B之间的每一个空隙匹配,计惩罚分2分;(2)对A和B之间的每一个错配,计惩罚分3分;(3)成功配对不计惩罚分算法设计采用动态规划维护一个dp[ i ] [ j ]的二维数组,该数组的含义为序列A的前i项与序列的B的前j项的惩罚函数的最小值dp[ i ] [ j ]初始化,更具惩罚函数的定义,不难得出dp[i] [0]=2i序列A的前i项与序列的B原创 2021-11-14 15:40:55 · 1085 阅读 · 0 评论 -
最长公共子序列问题(C语言)
最长公共子序列(C语言)问题描述首先需要科普一下,最长公共子序列(longest common sequence)和最长公共子串(longest common substring)不是一回事儿。什么是子序列呢?即一个给定的序列的子序列,就是将给定序列中零个或多个元素去掉之后得到的结果。什么是子串呢?给定串中任意个连续的字符组成的子序列称为该串的子串。给一个图再解释一下:如上图,给定的字符序列: {a,b,c,d,e,f,g,h}它的子序列示例: {a,c,e,f} 即元素b,d,g,h被去掉后,原创 2021-11-14 15:40:23 · 7351 阅读 · 3 评论 -
01背包问题(C语言)
01背包问题(C语言)参考链接:https://www.cnblogs.com/Christal-R/p/Dynamic_programming.html问题描述有n 个物品,它们有各自的重量和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?总体思路根据动态规划解题步骤(问题抽象化、建立模型、寻找约束条件、判断是否满足最优性原理、找大问题与小问题的递推关系式、填表、寻找解组成)找出01背包问题的最优解以及解组成,然后编写代码实现;原理动态规划与分治法类似,都是把大问题拆转载 2021-11-06 13:36:41 · 3301 阅读 · 0 评论 -
矩阵连乘(C语言)
矩阵连乘(C语言)参考链接:https://blog.csdn.net/qq_32919451/article/details/80643118问题描述给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。例如,给定三个连乘矩阵{A1,A2,A3}的维数分别是10 * 100,100 * 5和5 * 50,采用(A1A2)A3,乘法次数为101005+10550=7500次,而采用A1原创 2021-10-30 20:10:29 · 7012 阅读 · 2 评论 -
和最大字串以及最大上升子串(C语言)
和最大字串(C语言)参考博客:https://www.cnblogs.com/activeshj/p/4090817.html问题描述给你一个整型数组,其中的元素有正有负也有0,要求你找到一个连续的子串,子串的所有元素之和是所有的连续子串中最大的。例子:给定一组数,n个,有正,有负。要求找到和最大的连续子串,比如:5 , 4, -10, 11, 2, 8, -5, 4, 2,-3,1可以判断出和最大的连续子串是: 11, 2, 8, -5, 4, 2 其和为22 。算法思路如果暴力解法原创 2021-10-24 16:50:48 · 1037 阅读 · 0 评论 -
整数划分(C语言)
整数划分(C语言)参考博客:https://www.cnblogs.com/wkfvawl/p/11486992.html思路整理n=m1+m2+…+mi; (其中mi为正整数,并且1 <= mi <= n),则{m1,m2,…,mi}为n的一个划分。如果{m1,m2,…,mi}中的最大值不超过m,即max(m1,m2,…,mi)<=m,则称它属于n的一个m划分。这里我们记n的m划分的个数为q(n,m);当n=6时我们可以获得以下这几种划分(注意,例子中m>=6)根原创 2021-10-16 18:38:03 · 1743 阅读 · 1 评论 -
棋盘覆盖算法(C语言)
棋盘覆盖(C语言)参考博客:https://blog.csdn.net/qq_40274351/article/details/79643213问题描述在一个2k×2k 个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。可行性分析2k×2k大小的棋盘,除去1个特殊位置外,一共有(4k-1)个空位置,需要用(4k-1)/3原创 2021-10-16 15:46:50 · 6494 阅读 · 0 评论 -
全排列算法(C语言)
全排列(C语言)题意:给定1~n n个正整数,写出它们的所有排列顺序。思路:根据高中的知识,我们知道不重复的条件下结果是n!个排列顺序。运用递归的思想。背景一开始我的想法是用一个数组去存放1-n个正整数,然后再构造一个n*n的二维数组去存放每次递归交换之后该输出的全排列结果,但是这样会十分浪费空间。之后我又在思考能不能在每次输出一个结果以后就将之前的数据清除,只留一行长度为n的数组空间去交换,但是我始终没有想到最后如何在输出后释放空间进行再一轮排列。最后老师讲解了思路思路递归地把这组数规模一原创 2021-09-30 09:18:16 · 5891 阅读 · 1 评论 -
随机快速排序算法(C语言)
随机快速排序(C语言)分治法基本思想将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。递归的解决这些子问题,然后将各个子问题的解合并得到原问题的解。快速排序原链接:https://blog.csdn.net/haelang/article/details/44496387快速排序用到了分治思想,同样的还有归并排序。乍看起来快速排序和归并排序非常相似,都是将问题变小,先排序子串,最后合并。不同的是快速排序在划分子问题的时候经过多一步处理,将划分的两组数据划分为一大原创 2021-09-30 09:17:11 · 3186 阅读 · 0 评论 -
稳定匹配算法(C语言)
稳定匹配(C语言)问题起源在1962年,经济学家 David Gale 和 Lloyd Shapley 提出:能否针对生活中一些常见的匹配问题,设计一个能够自我执行(self-enforcing)获取最佳匹配的算法。这类问题可以称为稳定匹配问题。本博客讨论其中的一个最经典的问题:男女匹配。问题描述给出一个 n个男性的集合M 和n个女性的集合W,找到一个“稳定”匹配,其中:每位男性根据对女性的心仪程度从高至低进行排名;每位女性根据对男性的心仪程度从高至低进行排名。匹配匹配S 是一个包含有原创 2021-09-13 22:37:03 · 2700 阅读 · 2 评论 -
排序04之交换排序
交换排序基本思路:对待排序记录两两进行排序码比较,若不满足排序顺序则交换这对记录,直到任何两个记录的排序码都满足排序要求为止。冒泡排序定义第一趟对所有记录从左到右每相邻两个记录的排序码进行比较,如果这两个记录的排序码不符合排序的要求,则进行交换,这样一趟做完,将排序码最大者放在最后一个为止。第二趟对剩下的n-1个排序码做相同的操作,反复进行n-1次。如果在某一趟中,没有发生交换,则说明此时所有记录已经按照要求排列完毕排序结束。图解图源: https://www.cnblogs.com/hokk原创 2021-09-07 21:17:55 · 115 阅读 · 0 评论 -
排序03之归并排序
归并排序定义基本思路:一个待排序记录构成的文件,可以看作是由多个有序子文件组成的,对有序子文件通过若干次使用归并的方法,得到一个有序文件。归并是指将两个(或多个)有序子表合并成一个有序表的过程。图解图源:https://www.cnblogs.com/hokky/p/8529042.html代码详情视频:https://www.bilibili.com/video/BV1Ax411U7Xxc#include <stdio.h>#include <stdlib.原创 2021-09-07 21:16:56 · 131 阅读 · 0 评论 -
排序01之插入排序
排序排序的方法有很多,按排序过程中使用到的存储介质来分,可以将排序分成两大类,内排序和外排序。内排序:是指在排序过程中所有数据均放在内存中处理,不需要使用外存的排序方法。外排序:而对于数据量很大的文件,在内存不足的情况下,则还需要使用外存。这种排序称为外排序。稳定:在待排序文件中,可能存在排序码相同的记录,若经过排序后,这些记录仍保持原来的相对排序码相对次序不变,则称这个算法是稳定的,否则算法不稳定。评判算法优劣:执行时间,执行空间。图源:https://www.cnblogs.com/hok原创 2021-09-04 20:53:41 · 208 阅读 · 0 评论 -
排序02之选择排序
选择排序基本方法:每次从待排序的文件中选择出排序码最小的记录,将该记录放到已排序文件的最后一个位置,直到已排序文件记录个数等于初始待排序文件的记录个数。直接选择排序定义从所有n个待排序记录值红选择出排序码最小的记录,将该记录与第一个记录交换,再从剩下的n-1个记录中选择排序码最小的记录与第二个记录交换……,直到只剩下一个记录,排序完成。图解图源:https://www.cnblogs.com/hokky/p/8529042.html代码cvoid simpleseselectsort原创 2021-09-04 20:51:54 · 115 阅读 · 0 评论 -
二分法相关总结
二分法大致步骤设置left设置rightwhile循环里条件判断二分法if条件判断,改变left或right的区间范围时有关mid的运算得出区间return注意事项最好不用(left+right)/2形式,当left和right都是int,两个值的初始值都超过int限定大小的一半,那么left+right就会发生溢出,所以应该用left+(right-left)/2来防止求中值时候的溢出。问题合集在学习二分法时,我总会遇见以下问题:第二步设置right时不知道究竟是size还是si原创 2021-09-01 17:36:03 · 208 阅读 · 0 评论 -
数据结构有关检索内容的总结(C语言)
1.实验目的(结出本次实验所涉及并要求掌握的知识点)一、掌握顺序表的查找方法,尤其是二分查找方法。二、掌握基于链表的查找方法,并能给予实现。三、掌握二叉排序树的建立以及查找算法,并能给出实现。2.实验内容(结出实验内容具体描述)一、利用函数从data1.text读取不同规模数据存入数组,编写基于数组的顺序查找算法。二、编写基于单链表的顺序查找算法。三、编写基于数组的非递归二分查找算法四、编写基于数组的递归二分查找算法五、以数组中的数据作为输入建立一颗二叉排序树,并将中序遍历。3.算法描述原创 2020-12-13 23:43:05 · 819 阅读 · 0 评论 -
数据结构(C语言)---图
数据结构(C语言)— 图的相关实验实验目的1、熟练掌握图的邻接矩阵与邻接表存储结构及其应用。2、能设计出基于两种遍历算法的相关问题的求解,如深度遍历生成树的求解,广度遍历生成树的求解。3、理解并掌握最小生成树算法的基本思想及其算法方法。4、理解并掌握最短路径算法的基本思想及其算法方法。5、理解并掌握拓扑排序算法的基本思想及其算法方法。实验内容1、编写程序输出以邻接表为存储结构的无向图的各顶点的度。2、图采用邻接表存储结构,编程对图进行广度优先遍历。3、图采用邻接表存储结构,编程对图进行深原创 2020-12-06 22:42:54 · 2346 阅读 · 0 评论 -
数据结构(C语言)有关二叉树的相关算法题及思考
数据结构(C语言)有关二叉树的相关算法题及思考1.实验目的(结出本次实验所涉及并要求掌握的知识点)1、掌握二叉树的动态存储结构及表示方法2、掌握二叉树的前序、中序和后序遍历的递归和非递归算法、掌握二叉树的层次遍历算法。3、运用二叉树的3种遍历算法求解基于二叉树的有关问题。2.实验内容(结出实验内容具体描述)①编写算法函数void preorder1(bintree t)实现二叉树t的非递归前序遍历。②编写算法函数void levelbintree(bintree t),实现二叉树的层次遍历。原创 2020-11-29 15:37:53 · 3294 阅读 · 1 评论