
数据结构与算法
文章平均质量分 78
&矢志不渝^O^
这个作者很懒,什么都没留下…
展开
-
数据结构之链表的实际应用
今天给大家分享链表的实际应用,很多人学数据结构时总是学课本里的伪代码,其实看懂了课本的伪代码只是学会了数据结构的20%,在学数据结构时我们应该要多注重实践,多用已学的数据结构来解决一些实践的问题。下面是我自己写的链表完整代码(包括创建链表,链表插入数据,链表删除数据,修改链表指定位置的值),以供大家参考。完整源代码:#include <stdio.h>#include <stdlib.h>struct Stu *create(int n);void print(str.原创 2022-03-27 15:07:23 · 2355 阅读 · 0 评论 -
数据结构之栈的应用
上一篇文章分享了链表的实际应用,今天我来分享一下栈的实际应用吧,栈其实是一种特殊的线性表。栈有顺序栈和链式栈,这里谈的是顺序栈。栈的特点是先进先出,因此也它的功能也就没有链表那么多啦。下面是栈的一个实际应用例子(包括压栈,出栈,计算栈的长度以及栈的删除)完整源代码:#include <stdio.h>#include <stdlib.h>#include <string.h>//栈里元素个数#define SIZE 10 //栈的声明...原创 2022-03-27 15:24:59 · 1047 阅读 · 1 评论 -
数据结构之栈的应用(二)
今天来分享一下栈的应用中很常见的问题之二进制转换为十进制或其他进制。学过计算机的人都知道,计算机中数据存储是以二进制存储的,但我们平时在实际生活中很多数字都是以十进制呈现在我们面前。下面是利用栈来实现二进制转换为十进制(转化为其他进制以此类推)源代码:#include <stdio.h>#include <stdlib.h>#include <math.h>#define STACK_INIT_SIZE 20#define STACKINCREMENT .原创 2022-03-28 16:40:30 · 158 阅读 · 0 评论 -
栈的应用(三)之C语言实现逆波兰表达式
今天是清明节放假的第一天,博主也没闲着(拒绝偷懒),早上起来看了数据结构。今天就趁热打铁来讲讲《栈的应用之C语言实现逆波兰表达式》吧。波兰表达式存在的意义就是使运算式中即使没有括号,也可以执行正确的运算顺序。例如a+b的波兰表达式可以写作+ab,逆波兰表达式则是ab+。实现逻辑:1.首先我们拿到一个存放运算式的字符串。创建一个符号栈,用来放-+x/().2.对字符串逐一扫描。如果是数字我们直接输出。3.如果是运算符,而且此时符号栈空着的话就直接放进去。如果不是,我们就比较栈顶符号与扫描符号的优原创 2022-04-03 14:40:33 · 4123 阅读 · 2 评论 -
栈的应用(四)之C语言实现括号匹配
今天我们继续来看数据结构中栈的应用第四个问题——括号匹配问题(C语言实现版)。括号匹配就是利用栈的先进后出的灵活性来进行匹配。下面让我们一起来看看吧源代码:#include <stdio.h>#include <stdlib.h>#include<stdbool.h>#define size 50typedef struct { char elem[size]; int top;}seqstack;void initStack(seqs...原创 2022-04-03 22:44:19 · 3727 阅读 · 0 评论 -
数据结构——循环链表实现约瑟夫环(C语言实现)
今天来给大家分享一个学习数据结构时会遇到的经典问题——约瑟夫环。据记载,在被敌人围剿困在山洞的约瑟夫和一群和他一样的犹太人因不肯屈服于敌人而设计了一个环节:一群人围成一个环(后来因此称为约瑟夫环)来进行决定谁先自杀环节,一群人按照一定的顺序进行数数,刚好数到规定数的那个人就先自杀。聪明的约瑟夫和他的一个朋友串通好,并站在规定好的位置因此逃过一劫,其他人都自杀完了。由此这问题就流传到现在,成了著名的约瑟夫环问题。这其中涉及到了一个数据结构--循环链表(聪明的约瑟夫和他朋友也许当年就会了这数据结构了,hhh)。原创 2022-04-04 14:28:14 · 4224 阅读 · 0 评论 -
常见八种排序(一)(C语言实现版)
还记得大一上学期学习C语言数组的元素排序时,在现场叫了八个同学在讲台上排成一排(不用想,博主当时就在那排人中,hhh),然后通过第一位同学与第二位同学比较,高的在后面,再依次类推,第二位同学与第三位同学比较......这样比下去最后一位就是最高的啦,最后一位同学的前面同学再依次循环下去,这样就可以实现身高从低到高的排序啦。其实这是冒泡排序的原理(博主后来才知道)。排序一直都是很常见的问题,在c++,java,python编程语言中都有相应的正序和逆序方法(其实实质都是C语言写的),调用起来非常方便。但C语言原创 2022-04-06 15:00:56 · 318 阅读 · 0 评论 -
常见的八种排序(二)(C语言实现)
上一篇文章分享了常见八种排序中的前四种,这一篇文章我们趁热打铁来说说后面这四种排序方法吧。第五种选择排序:原创 2022-04-07 14:50:33 · 568 阅读 · 0 评论 -
数据结构之队列(一)(C语言版)
博主好久没发数据结构知识点的学习了,我们今天来看看队列的基础知识点吧,后几篇文章博主再来分享一些队列的实际应用。队列平时我们用的最多的是链队,顺序队列因为浪费空间,不推荐使用。这篇文章主要讲链队。好啦,废话不多说,直接上干货。1.定义数据类型:typedef struct Qnode{ ElemType data;//其中数据域data为抽象元素类型 struct Qnode *next;//其中next为指针类型}Qnode,*QueuePtr;//其中,Qnode为结点类型...原创 2022-04-08 22:59:55 · 686 阅读 · 0 评论 -
数据结构之队列(二)(C语言版)
在分享完队列的基础知识后,我们再来看队列的几种特殊分类——循环队列。循环队列其实跟队列区别不同的点就在于出队和入队。我们经常把循环队列看成一个环。如图:循环队列入队操作:Status EnQueue(SqQueue *Q,QElemType e){ if((Q->rear+1)%MAXQSIZE==Q->front) return ERROR; Q->base[Q->rear]=e; Q->rear=(Q->re...原创 2022-04-08 23:32:54 · 905 阅读 · 0 评论 -
数据结构之队列应用(一)(C语言版)
在前面的两篇关于队列的文章后,今天这篇文章我们来讲讲它的应用。刚好前几天我们在上数据结构课上,老师给我们留下了一道作业题。题目:问题描述设有个人站成一排,从左向右的躺号分别为1~ n ,现在从左往右报数“1,2,1,2,…”,数到“1”的人出列,数到“2”的立即站到队伍的量右鸡。报数过程反复进行,直划个人都出为止。要求给出他们的出列心序。例如,当 n =8时,初始序列为12345678则出列順序为13572648为了帮同学更加了解题意,老师还随机叫了8名同学到讲台上排成一列,每人手里有原创 2022-04-10 18:11:38 · 1503 阅读 · 0 评论 -
数据结构之树的基础知识
y今天我们翻开新的篇章,在结束了前面一对一的线性表后,我们来看看一对多的树。树这种数据结构其实在我们生活中也是很常见的,应用也是很广的。和线性表,图共同占据算法界的半壁江山(hhh,博主自己脑补的)所以博主也会花很多时间来给大家分享树的基础知识,不同种类和应用。好啦,废话不多说。直接上干货。一、树的概念树(Tree)是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。之所以把它叫做树,是因为原创 2022-04-11 18:14:30 · 1389 阅读 · 0 评论 -
数据结构之顺序表实现学生信息管理(C语言版)
今天博主呢来分享一下前周的数据结构作业,是一道用顺序表来实现学生信息管理的作业。大家不要小看这道题,博主在做的时候也是频繁踩坑(也许是博主菜呢,hhh)。今天分享出来主要就是给需要的同学或路过的同学看看。下面是解题代码(纯手打):...原创 2022-04-16 17:16:01 · 7539 阅读 · 1 评论 -
数据结构之二叉树基础知识
前面我们分享完了数据结构中树的基础知识后,今天我们来分享数据结构之二叉树的基础知识吧,后面博主再专门来分享二叉树的应用吧(敲黑板,这内容很重要,要划重点哦,hhh)。下面直接上干货:1.概念:一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。二叉树的特点:每个结点最多有两棵子树,即二叉树不存在度大于2的结点。 二叉树的子树有左右之分,其子树的次序不能颠倒。2.特殊二叉树:(1).满二叉树:一个二叉树,如果每一个层的结点数都达原创 2022-04-17 01:21:20 · 352 阅读 · 0 评论 -
数据结构之二叉树的三种遍历实现(C语言版)
在昨天发表的二叉树的基础知识后,博主趁热打铁来分享一下《数据结构之二叉树的三种遍历实现代码》,虽然准确的来说,是四种遍历方式,由于层次遍历比较简单,考试做题遇到的比较少,这里就不多说了。在分享代码之前,博主想说自己在写这代码踩到的坑,我想很多新手朋友在以后写的树的代码时大概率也会想博主一样踩这坑。踩坑不是什么坏事,暴露出来就要改正对吧。好啦,不转弯抹角啦,其实就是在树的结点分配内存时要注意申请的空间不要太小。注意指针类型和数据类型的空间大小的区别。指针类似是八个字节,数据类型要看情况,像结构体的大小是要把里原创 2022-04-17 16:40:09 · 3813 阅读 · 1 评论 -
数据结构之二叉树的基本操作(C语言版)
在前面的几期文章中,博主分享了二叉树的基本知识和三种遍历的实现,突然发现二叉树的基本操作居然还没有专门做文章分享过。这不得立刻安排!其实二叉树的基本操作很重要,以后我们很多利用二叉树的性质来解题时是经常要用到的。下面直接上干货(注意二叉树没有插入删除操作哦)1.查找二叉树中的结点BTNode* FindNode(BTNode* T, ElemType x){ BTNode* p; if (T == NULL) { return NULL; } ...原创 2022-04-18 16:21:02 · 1815 阅读 · 0 评论 -
数据结构之二叉树来实现四种遍历(进阶版)(C语言实现版)
前面有一期是关于二叉树的三种遍历方式实现代码,那是属于简单版,结合二叉树的顺序存储。而这期文章是结合二叉树的链式存储来解决四种遍历(包括前面因为复杂麻烦没说的层次遍历),这主要结合队列的知识来实现代码。下面一起来看看代码吧。...原创 2022-04-18 17:47:07 · 1368 阅读 · 0 评论 -
数据结构之广义表
前面分享了串的模式匹配后,今天我们来看看是《数据机构与算法》这本书最容易忽略的一种数据结构——广义表。广义表在日常应用中也不算冷门,leetcode等刷题网站也可以看到它的身影。下面我们了解一下它吧。1.概念:广义表:(又称列表Lists)是n≥0个元素a₀ ,a₁,…,an-1的有限序列,其中每一个ai或者是原子,或者是一个广义表。广义表通常记作: LS = (a1,a2,…,an)其中,LS为表名,n为表的长度,每一个ai为表的元素。习惯上,一般用大写字母表示广义表,小写字母表示原子。表头:原创 2022-04-20 13:46:22 · 1703 阅读 · 0 评论 -
数据结构之线索二叉树的基本知识
前面说完了二叉树的基本知识后,我们紧追其后来分享几种特殊又很重要的二叉树,这几种特殊的二叉树在平时的刷题中也是重点和难点,是树这一数据结构的最高层次。今天我们开始来看一看第一种吧——线索二叉树。1.概念:为了区分二叉树的左孩子指针和右孩子指针是否为空,或者是否指向前驱节点或后继节点,我们将节点的结构改成5个域,在原二叉树的基础上添加左标志域Ltag和右标志域Rtag,他们是两个int型的数据域。如果节点有左孩子,那么Lchild依然指向他的左孩子,否则指向遍历序列中他的前驱节点。如果节点有右原创 2022-04-23 14:48:59 · 2165 阅读 · 0 评论 -
数据结构之哈夫曼树的基本知识
前面讲到了线索二叉树的基础知识后,今天我们紧随其后来说说另一种特殊二叉树---哈夫曼树.这几种特殊二叉树可能理解起来有点难度,没关系,我只能说慢慢理解,隔一段时间拿出来理解理解,说不定自己随着学的东西越来越多,理解起来就会越来越容易.好啦,直入正题,给大家分享一下哈夫曼树的基础知识吧1.学习哈夫曼树必懂的几个术语:在一棵树中,从一个结点往下可以达到的结点之间的通路,称为路径。某一路径所经过的“边”的数量,称为该路径的路径长度若将树中结点赋给一个带有某种含义的数值,则该数值称为该结点的权。原创 2022-04-24 23:28:51 · 2141 阅读 · 0 评论 -
数据结构之图的基础知识(一)
今天我们翻开新的篇章,来看一看另一种全新的数据结构——图。图是多对多的关系,在平时也是经常见到的,应用也很广泛,后面我们要讲到的生成树和最短路径,拓扑排序都与图的内容有关。下面一起来看看图的基础知识吧1.概念:图是由顶点的有穷非空集合和顶点之间边的集合组成,表示为G(V,E),其中G表示一个图,V是图G中顶点的集合,E是图G中边的集合。若顶点vi到vj之间的边没有方向,则这条边为无向边,表示为(vi,vj)或(vj,vi),反之为有向边(或弧),表示为<vi,vj>,其中vi称为弧尾,vj称原创 2022-04-26 00:30:19 · 682 阅读 · 0 评论 -
数据结构之图的基础知识(二)
前面分享完图的概念和图的几种存储结构后,我们趁热打铁来看看图的遍历吧。图的遍历主要有两种方式——深度优先遍历(DFS)和广度优先遍历(BFS)。这其实是两种很重要的算法,如果你经常刷算法题,你会经常遇到它们。这两种算法的题目真的很多。以后的leetcode也会重点分享这类题目。好啦,下面重点来讲解这两种遍历算法吧1.深度优先遍历(BFS):从图中某个顶点V0 出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到。基本实现方法:原创 2022-04-27 23:57:35 · 525 阅读 · 0 评论 -
数据结构之图的应用(1)——最小生成树
在学完图的存储结构和两种遍历后,相信大家对于图也有了自己的理解了吧,下面我们继续来讲讲图的应用方面吧,应用方面其实有很多很多,但课本好像只列举四种——最小生成树,最短路径,拓扑排序和关键路径。下面我们就一一来分享给大家吧。今天这期文章主要分享一下最小生成树。最小生成树。生成树:是由n个顶点,n-1条边,将一个连通图连接起来,不形成回路可以分为深度优先生成树和广度优先生成树。概念:最小生成树(minimum spanning tree)是由n个顶点,n-1条边,将一个连通图连接起来,不形成回路原创 2022-05-01 19:44:21 · 1335 阅读 · 0 评论 -
数据结构之图的两种遍历实现(C语言版)
上一期文章分享完了图的两种遍历方式,也是两种很重要的算法——DFS和BFS。这两种算法的应用和重要性我就不多说了,内行的人懂的都懂。今天这文章重要就是来上机实现这两种算法,又由于这两种算法都可以由邻接矩阵和邻接表来表示,博主分享的代码都是上机测试过的,在vs2019(其他编译器我不知道行不行)上都是可以运行的。1.深度优先搜索(DFS):...原创 2022-05-04 00:57:27 · 3021 阅读 · 0 评论 -
数据结构之图的应用(二)之最短路径
前面我们一期文章我们分享了图的应用中的一种——最小生成树。现在我们开始来讲讲第二种原创 2022-05-04 20:35:04 · 943 阅读 · 0 评论 -
数据结构之图的应用(三)之拓扑排序
前面的两期文章讲的两种图的应用——最小生成树和最短路径都是根据这个无向图的讨论的。而今天应用主要是放在有向无环图中讨论的。接下来,我们一起来看看这种拓扑排序吧1.有向无环图总的来说,就是没有像有向图一样全部连接起来成环的图。好啦,扩展完毕后,接下来,我们就正式来看看拓扑排序吧。核心思路:原理图:拓扑排序没有唯一的结果,可以有很多种结果哦。因为有些顶点找不到前驱顶点,如图的构成环的三个顶点。实现拓扑排序代码:#include <stdio.h.原创 2022-05-06 17:28:03 · 496 阅读 · 0 评论 -
数据结构之图的应用(四)之关键路径
前面已经分享完了图的应用的三种。这三种可以说是很重要的,涉及了几个重要算法。今天,我们来分享《数据结构与算法》书本里的图的第四种应用——关键路径。下面我们一起来看看吧1.AOE网不知大家在前...原创 2022-05-09 18:19:20 · 1318 阅读 · 0 评论 -
数据结构的运算之查找(一)
在前面我们花了很长时间学习了几种基本的数据结构后,今天我们继续来看看下一个重要的内容——数据结构的运算。数据结构的运算包括几种,如查找,删除,排序和插入等等。接下来的即将期文章,我们将一种一种运算分享给大家。下面看第一种——查找。查找是指根据给定的某个值,确定关键字值,查询确定关键字值与给定值相等的记录在文件中的位置。它是程序设计中一项重要的基本技术。查找的结果有两种情况:若在文件中找到了待查找的记录,则称查找成功,这时可以得到该记录在文件中的位置,或者得到该记录中其他的信息;若在文件中没有找到所需要的原创 2022-05-16 20:20:40 · 265 阅读 · 0 评论 -
数据结构的运算之查找(二)
在前面分享完循序表的查找算法后,今天我们来看看树表和散列表(哈希表)的查找算法把一)树表1.二叉排序树的查找操作二叉排序树的查找算法核心思路:实现代码:该算法分析二叉排序树的平均查找长度的分析:2.二叉排序树的插入操作:...原创 2022-05-21 16:01:34 · 230 阅读 · 0 评论 -
数据结构的运算之查找(三)
在前面分享完顺序表和二叉排序树的相关操作后,我们继续来看看平衡二叉树的相关操作吧1.平衡二叉树的定义:2.平衡因子:如图的二叉树就是平衡二叉树啦3.平衡调整的四种类型:4.调整的四种类型:(1)LL型:...原创 2022-05-21 18:10:36 · 132 阅读 · 0 评论 -
数据结构的运算之查找(四)
今天我们来看看数据结构运算之查找的最后一种——散列表查找(也叫哈希表查找,主要是利用hash函数)。1.散列表的概念:注意:散列函数计算得到的散列值是一个非负整数;2.散列表的构造方法:(方法有很多种,这里就只是列出了比较常用的两种方法)注意质数这一点。p 应为小于等于m,最好是接近m 的最小质数3.解决冲突的几种方法:其中线性探测法:取余13,就有13种可能,就可以有13个单链表表头。4.散列表的查找:假设采用开放地址法处...原创 2022-05-22 16:39:04 · 148 阅读 · 0 评论 -
数据结构的运算之插入排序
前面分享完数据结构运算的查找后,今天,我们来看看数据结构的运算中的排序问题,排序问题分为很多种,记得前面有一期文章已经有分享过八种比较常见的排序。下面博主会分享几种比较好用的排序。我们一起来看看吧首先:插入的结点可能存在多种关键信息,所以有一下定义:第一种排序;插入排序...原创 2022-05-24 00:37:00 · 136 阅读 · 0 评论 -
数据结构的运算之交换排序
今天,我们来看看数据结构的运算之交换排序。首先,交换排序的核心思路:1.冒泡排序:冒泡排序算法实现:冒泡排序性能分析:改进冒泡排序:改进后的冒泡排序算法实现...原创 2022-05-26 00:21:50 · 185 阅读 · 0 评论 -
数据结构的运算之选择排序
今天,我们来看看选择排序的相关内容第一种:简单选择排序简单选择排序的算法实现:性能分析:第二种:堆排序原创 2022-05-26 13:51:46 · 169 阅读 · 0 评论 -
数据结构的运算之归并排序和基数排序
今天,我们来看看数据结构的运算的最后两个排序——归并排序和基数排序1.归并排序归并排序的算法实现:#include<stdio.h>#include<stdlib.h>//归并排序void Merge(int arr[],int nBegin,int nEnd){ int nBegin1 = nBegin; int nEnd1 = nBegin +(nEnd-nBegin)/2; int nBegin2 = nEnd1+1;...原创 2022-05-26 14:51:55 · 255 阅读 · 0 评论