数据结构与算法
文章平均质量分 68
数据结构与算法
GWNH
这个作者很懒,什么都没留下…
展开
-
二叉树已知前序,中序,后序任意两种求另外一种
前序:GDAFEMHZ中序:ADEFGHMZ后序:AEFDHZMG已知前序中序,求后序:由前序可知顶点是G,由中序可知左子树为ADEF 右子树为:HMZ在左子树中由前序可知,顶点为D,由中序可知子左子树为A,右子树为EF;由前序知F为顶点,由中序知E为左子树右子树HMZ由前序知M为顶点,由中序知H为左子树,Z为右子树已知后序中序,求前序:由后序知顶点为G,由中序知左子树为ADEF,右子树为HMZADEF中由后序知D为顶点,由中序知A为左子树,EF为右子树EF中由后序知F为顶点,由中序知原创 2020-05-31 15:35:14 · 249 阅读 · 0 评论 -
n皇后问题详解
棋盘是nxn大小的,每一行放一个皇后,皇后与皇后之间不能相互攻击(不能在同一列,不能在对角线)核心代码:void queen(int row){ if(row>n-1) { count++; print(); return; } int col; for(col=0;col<n;col++) { if(isDanger(row,col)) { cheer[row][col]=1; queen(row+1); cheer[row][col]=原创 2020-05-31 11:49:40 · 2040 阅读 · 0 评论 -
汉诺塔的C语言实现和递归过程讲解
递归问题的简单之处在于只要搞清楚宏观的几个步骤,照猫画虎,就可以借助电脑程序来帮助我们实现整个问题的解决。递归指出难在你总是想要搞清楚里面的每一个细节(会很绕的啊…)汉诺塔问题我总结出的三点宏观步骤(假设有三个A B C柱子):我们要将前n-1个盘子从A放到B中去,此时C是中转站我们要将原本留在A的最大的那个盘子从A放到C,此时B是中转站我们要将已经放到B中的n-1个盘子从B放到C中去,此时A是中转站void move(int n,char from,char buffer,char to)原创 2020-05-29 13:03:08 · 696 阅读 · 0 评论 -
模式串的next()函数值
模式串:ababaaabanext:011234223方法:前两位是0和1第三位:前一位b对应的next值为1,1对应的a(在数组中第一个数为a)和b不相同,故第三位的next值为1第四位:前一位a对应的next值为1,1对应的a和a相同,故第四位的next是在前一位(第三位)的next上+1,为2第五位:前一位b对应的next值为2,2对应的b和b相同,故第五位的next是前一位(第四位)的next上+1,为3第六位:前一位a对应的next为3,3对应的a和a相同,故第六位的next是前一原创 2020-05-27 17:44:37 · 22356 阅读 · 7 评论 -
栈的基本功能和用栈解决括号匹配问题
栈的基本原理很简单,先进后出。简单来说,栈是一个操作受限的线性结构,一共四个功能:入栈(push)判断栈满(isFull)出栈(pop)判断栈空(isEmpty)栈是一个操作受限的线性表,而线性表呢,主要有两种:顺序存储的数组优点:操作简单,节省空间缺点:栈的大小一开始就声明“死”了,不利于使用非顺序存储的链表优缺点和顺序存储数组恰恰相反数组栈把数组强大的下标功能给割腌掉,只能在头一个头进,头一个头出。创建一个结构体typedef struct node{ int dat原创 2020-05-27 15:03:17 · 329 阅读 · 0 评论 -
单向链表的基本功能
大一的时候用c语言学的链表,学的懵懵懂懂,模模糊糊;大二的时候重新回顾链表的相关知识,有了一个更为宏观的概念。(这里只讲单向链表)链表是一系列存储数据元素的单元通过指针联系起来的,因此每个单元都至少包含了两个区域,一个是存储数据元素的区域,一个是存储指针的区域。这些存储数据元素的单元我们统称为节点(node)。单向链表中数据域是存储数据用的,指针域是用来指向下一个有同样结构的单元。和数组类似,单向链表的节点也是一个线性次序,比如 a0的next只想a1,则a0是a1的前驱,可以用一个指针找到某个原创 2020-05-27 11:25:31 · 343 阅读 · 0 评论 -
快排代码实现和时间复杂度计算
1.左右指针法:思路:找到一个基准点 base,左指针,右指针分别是数组的第一个和最后一个左指针向后遍历直到遇到比base大的数,停下右指针向前遍历直到遇到比base小的数,停下交换左右指针对应的数继续遍历,直到左指针和右指针重合为止基准点回归(将此时的左(右)指针对应的数和基准数交换)完成依次遍历,即基准左边的数小于基准数,右边的数大于基准数左边的数递归遍历右边的数递归遍历当左指针和右指针重合后,返回代码:void quick_sort(int left,int right,原创 2020-05-24 15:12:04 · 3665 阅读 · 0 评论 -
1.桶排序
下面给大家介绍一个很快很简单的排序算法,桶排序。桶排序的基本思想我感觉和希尔排序很类似。但在这里,我们主要讲解其思想的主要部分,这里的桶排序还不是完全意义上的排序算法,只是在第一节中让我们接触一下它的思想。举例:班里有5个同学,在一次考试中分别为5,3,5,2,8分(满分10分);老师呢要按照这个成绩给班里的同学进行排序,如何让计算机读入这5个数然后将这5个数进行从大到小的输出呢?流程:构造一个一维数组,数组下标0-10分别表示分数0-10,不同分数对应的单元格则存储着得此分数的人下面来处理每原创 2020-05-20 17:48:19 · 108 阅读 · 0 评论