![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 50
冥炎
这个作者很懒,什么都没留下…
展开
-
数据结构-图的相关概念及实现
由于图的结构比较复杂,任意两个顶点之间都可能存在关系,因此用简单的顺序存储来表示图是不可能,而若使用多重链表的方式(即一个数据域多个指针域的结点来表示),这将会出现严重的空间浪费或操作不便。有向边:若从顶点Vi到Vj的边有方向,称这条边为有向边,也称为弧(Arc),用来表示,其中Vi称为弧尾(Tail),Vj称为弧头(Head)。图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。原创 2023-02-16 22:15:10 · 122 阅读 · 0 评论 -
分治算法及归并排序
分治法,字面意思是“分而治之”,就是把一个复杂的1问题分成两个或多个相同或相似的子问题,再把子问题分成更小的子问题直到最后子问题可以简单地直接求解,原问题的解即子问题的解的合并,这个思想是很多高效算法的基础,例如排序算法(快速排序,归并排序),傅里叶变换(快速傅里叶变换)等。对于一个规模为n的问题,若该问题可以容易的解决(比如规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解决这些子问题,然后将各个子问题的解合并得到原问题的解。原创 2023-02-08 23:25:44 · 88 阅读 · 0 评论 -
查找算法的实现
在一个升序或降序的数据域中,对我们要查找的数k,逐步确定k所在空间,每一次查找都将搜索空间减少一半(折半),直到查找成功或失败为止。查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;哈希函数类似于数学中的一次函数,我们给它传递一个元素,它反馈给我们一个结果值,这个值就是该元素对应的索引,也就是存储到哈希表中的位置。每个存储到哈希表中的元素,都配有一个唯一的标识(又称“索引”或者“键”),用户想查找哪个元素,凭借该元素对应的标识就可以直接找到它,无需遍历整个哈希表。原创 2023-02-07 20:11:46 · 72 阅读 · 0 评论 -
动态规划算法及其应用题
首先是拆分问题,把问题划分成一步一步这样就可以通过递推或者递归来实现.关键就是这个步骤,动态规划有一类问题就是从后往前推到,有时候我们很容易知道:如果只有一种情况时,最佳的选择应该怎么做.然后根据这个最佳选择往前一步推导,得到前一步的最佳选择然后就是定义问题状态和状态之间的关系,将前面拆分的步骤之间的关系,用一种量化的形式表现出来,类似于高中学的推导公式,因为这种式子很容易用程序写出来,也可以说对程序比较亲和(也就是最后所说的状态转移方程式)。如果有满足条件的选择,则此背包有解,否则此背包问题无解。原创 2023-02-06 23:06:48 · 152 阅读 · 0 评论 -
使用C语言实现几种排序算法
一趟排序的过程,将相邻的两个元素进行比较,如果前一个比后一个大,则将两个元素交换–将最大的元素交换到整个数据的最后。(1)将数据分为两部分,前一段是已经有序的数据(初始时,前一段数据只有一个),后一段是无序数据。(2)从无序数据中拿一个数据(拿左边的第一个数据),插入到前一段的有序数据中,并且使其依旧有序。(1)先在数据中找一个基准数据:找待排序数据序列的第一个,随机数,三位数取中。(2)将数据按照基准数据分成两部分,前一段都比基准小,后一段都比基准大。(3)重复上述过程,直到无序数据段没有数据。原创 2023-02-03 23:37:26 · 59 阅读 · 0 评论 -
利用栈结构和回溯算法来解决八皇后问题
我们可以每一行(或每一列)依次放一个棋子,之后在下一行(或下一列)再放棋子的时候需要比较之前已经放了的棋子是否会有冲突(被其他皇后攻击),依次放棋子直至完成八个棋子的存放,这需要用到递归和回溯的方法,并运用栈结构。八皇后问题起源于国际象棋,在国际象棋中,皇后的势力范围是它所在的行、列以及对角线在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。5.然后回头继续第一个皇后放第二列,后面继续循环执行 1,2,3,4的步骤。原创 2023-02-02 23:13:49 · 268 阅读 · 1 评论 -
利用队列来解决迷宫最短路径问题
将所有方向用dir数组装起来,将顶点加入队列,进入循环,循环出口:为x,y坐标等于设置的出口坐标,每次将各个方位的坐标加入队列中并做上标记(防止重复走,减少计算量),最先到达循环出口的即为最小路径。将起点放入队列,从队列中拿出队列首部数据进行第一次循环,具体及起点向下能走吗,如果能,将起点向下的这一位置放入队列尾部,如果不能,起点能向右走吗,如果能…基本思路为从迷宫入口(1,1)出发,向四周搜索,记下所有一次能通达的坐标p11,p12,…直至达到出口点(m,n),然后从出口点沿搜索路径回溯直至入口。原创 2023-02-01 22:03:57 · 740 阅读 · 0 评论 -
C语言实现队列数据结构
首先是队列的结点设计,可以设计出两个结构体,一个结构体 Node 表示结点,其中包含有 data 域和 next 指针,其中 data 表示数据,其可以是简单的类型,也可以是复杂的结构体。next 指针表示,下一个的指针,其指向下一个结点,通过 next 指针将各个结点链接。在队列的最前端称为队头,在队列的末尾称为队尾。只允许在队的前端进行删除的操作又称作出队,在表的后端进行插入的操作,称为入队,符合先进先出的特性。和栈一样,队列也可以有两种实现方式:数组实现的顺序队列和链表实现的链式队列。原创 2023-01-31 23:31:05 · 103 阅读 · 0 评论 -
利用栈结构来实现计算器功能
我们的要求是,优先级高的要先进行运算,后缀表达式是只有在遇到运算符时才弹出两个数进行运算,那么我们要做的就是把优先级最高的最先弹出,在有加减乘除和括号的运算中,括号的优先级无疑是最高的,所以遇到右括号时就可以直接弹出直到遇到左括号,遇到其他符号时就先存放在栈中,然后,当一个优先级低的元素要进栈时,优先级较高的运算符就必须先弹出来进行运算。到最后栈中还剩下的运算符,由于后面没有运算符了,而栈中的运算符本来就是按照优先顺序排序的,所以就直接按顺序弹出。当遇见右括号时,我们就把栈的元素弹出,直到遇见一个左括号。原创 2023-01-31 00:05:41 · 515 阅读 · 0 评论 -
C语言实现栈结构
采用链式存储的栈称为链栈,链栈的优点是便于多个栈共享存储空间和提高其效率,且不存在栈满上溢的情况。通常采用单链表实现,并规定所有操作都是在单链表的表头进行的。栈允许插入和删除操作的一端称为栈顶(Top),而另一端则称为栈底(Bottom),栈底是固定的,在还有其他元素时不能进行操作,而不含任何元素的栈称为空栈。栈的插入操作称为入栈(Push),栈的删除操作称为出栈(Pop)。栈是一种特殊的线性表结构,限定仅在表尾进行插入和删除操作,并且具有先进后出的特性。接下来用C语言来分别实现顺序栈结构和链栈结构。原创 2023-01-29 23:08:55 · 76 阅读 · 0 评论 -
C语言实现链表数据结构并解决约瑟夫问题
在约瑟夫问题中,每个人都是一个结点,而报数到哪个结点,那么这个结点就会被删除。链表是靠结点的next指针一层一层连接的,在计算机的底层,每一个结点所在的内存位置是不同的(每new一个结点,计算机就会随机分配一个地址),只能靠next指针一点一点的去找到我们想要的元素。为了表示每个数据元素ai与其直接后继元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置),这两部分信息组成数据元素ai的存储映像,称为结点。查找链表对应位置元素。原创 2023-01-19 01:32:27 · 214 阅读 · 0 评论