数据结构
傻乎乎的社会人
一只迷茫但是还在努力的小可爱(๑• . •๑)
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
串的模式匹配算法:KMP算法
串的模式匹配即子串定位是一种重要的串运算。设s和t是给定的两个串,在主串s中找到等于子串t的过程称为模式匹配,如果找到,则称匹配成功,函数返回t在s中的首次出现的存储位置(或序号),否则匹配失败,返回-1。t也称为模式。串的模式匹配有两种算法:简单的模式匹配算法KMP算法简单的模式匹配算法: 算法思想:首先将s1与t1进行比较,若不同,就将s2与t1进行比较,…,直到si和t1...原创 2019-04-23 12:04:25 · 1579 阅读 · 0 评论 -
归并排序--C语言
今天写的是归并排序,归并排序的定义为:依次将每两个相邻的有序表合并成一个有序表的排序方法。最经常使用的归并方法是2-路归并。假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到⎡n/2⎤个长度为2或1的有序子序列;再两两归并,……,如此重复,直至得到一个长度为n的有序序列为止,这种排序方法称为2-路归并排序。今天的算法代码就是按照2-路归并排序的思想写...原创 2019-02-19 18:08:58 · 404 阅读 · 0 评论 -
堆排序--C语言
昨天写了选择排序中的简单选择排序,今天把另一种选择排序算法–堆排序写一下。以前一直对堆排序有所误解,现在再次去学习才知当日只是明白了调整堆的算法,而不知道实际具体的排序,现在想来还是当时对自己太仁慈的缘故。 将无序序列建成一个堆,得到关键字最小(或最大)的记录;输出堆顶的最小(大)值后,使剩余的n-1个元素重新又建成一个堆,则可得到n个元素的次小值;重复执行,得到一个有序序列,这个过程叫堆...原创 2019-02-14 15:23:57 · 179 阅读 · 0 评论 -
希尔排序--C语言
近期由于身体不适,好久不曾写博客了。但是觉得生病不应该成为不学习的借口,所以今天开始还是继续自己的学习之旅。因为一旦停的时间久了,借口会越来越多,最后重蹈覆辙,之前的努力又白费了。 今天写的是希尔排序。希尔排序是插入排序的一种。它将待排序的数组按照一定间隔分为若干个子序列,对每个子序列分别进行直接插入排序。然后缩小间隔,继续上述过程,直至间隔为1,则为普通插入排序。算法代码如下:#in...原创 2019-01-08 11:59:35 · 176 阅读 · 0 评论 -
插入排序--直接插入、折半插入
昨天写了交换排序的算法(包括冒泡排序、快速排序),今天写一写插入排序。插入排序有三种:直接插入排序、折半插入排序、希尔排序。时间有限,今天先写一下直接插入排序和折半插入排序,希尔排序等明天有时间再写! 插入排序是将未排序序列中的元素依次拿出来与已排序序列中的元素进行比较,插入到已排序序列中的适当位置的排序方法。 直接插入排序是一种简单的排序的方法,基本操作为:将一个元素插入到已排序的序...原创 2018-12-27 17:02:53 · 723 阅读 · 0 评论 -
冒泡排序、快速排序--C语言
排序算法分为内部排序和外部排序,内部排序又分为交换排序、选择排序、插入排序。今天写一下交换排序的算法。 交换排序的思想是比较两个对象的关键字,如果这两个对象的关键字发生逆序,则交换这两个对象的位置。交换排序分为冒泡排序和快速排序。 对于冒泡排序:如果待排序的元素有n个,则要进行n-1轮比较,第i轮的比较次数为n-i-1次。对于冒泡排序算法的改进则是增加一个bool类型的变量,用于记录第...原创 2018-12-26 17:12:32 · 421 阅读 · 0 评论 -
约瑟夫环--C语言
约瑟夫(Joseph)问题的一种描述是:编号为1,2,3,…,n的n个人按顺时针方向围坐一圈。每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,令其出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新报数,如此下去,直到所有人全部出列为止。 试设计一个程序求出出列顺序。 测试数据:m的初值为20...原创 2018-12-25 22:43:19 · 967 阅读 · 1 评论 -
递归遍历二叉树--C语言
之前写了关于二叉树的非递归遍历算法的代码,今天把二叉树的递归遍历算法的代码补上,内容很简单!但是今天也算是写了一会儿代码了~姑且这么认为吧~代码:#include <stdio.h>#include <stdlib.h>typedef struct BiTNode{ char data;//二叉树节点数据 struct BiTNode *lc...原创 2018-12-22 23:27:13 · 892 阅读 · 2 评论 -
二叉树层次遍历--C语言
之前写了二叉树的先序、中序、后序遍历,这些遍历都用到了栈结构。今天写一下二叉树的层次遍历,层次遍历用到的数据结构是队列。 层次遍历算法中增加了三个int型数据,其中levelcount用于记录现在处理的是树的第几层;curlevel用于记录当前层还有几个节点没有被访问过;nextlevel用于记录本层的下一层的节点数。代码如下:#include "stdafx.h"#include ...原创 2018-12-21 17:54:22 · 12968 阅读 · 7 评论 -
二叉树节点数及叶子节点数
继续二叉树系列的代码内容。今天写的是求二叉树节点个数及叶子节点个数的代码。采用了递归的方法求解。代码如下:#include "stdafx.h"#include "stdio.h"#include "stdlib.h"typedef struct BiTNode{ char data;//树中节点的数据 struct BiTNode *lchild,*rchild;//节点的...原创 2018-12-19 17:05:42 · 5496 阅读 · 0 评论 -
二叉树后序遍历(非递归)算法实现--C语言
一直说要写二叉树的后序非递归遍历算法,但是前两天各种事情,今天终于有时间好好写一写二叉树的后序遍历算法。 二叉树的后序遍历算法比先序和中序的遍历算法要复杂一些。其出栈条件有两种情况:栈顶元素所指向的节点的左子树和右子树均为空;栈顶元素所指向的节点的左子树和右子树均被访问过。第一种情况比较好判断,但是对于第二种情况就比较麻烦一点。要先判断其左子树和右子树是否分别被访问过。 对于...原创 2018-12-18 16:14:37 · 14251 阅读 · 0 评论 -
Huffman树的实现
昨天下午看了Huffman树的算法,写了部分代码,今天试着调试了一下,虽然过程有点坎坷,但是最终还是出来结果了。这个代码写的很粗糙,好多地方需要改进:比如选择最小的两个数的时候,应该对这两个数进行排序再去构造数,代码里好多地方没有注释。等有时间我会再把这个代码完善一下,慢慢精细化。代码如下:`// HuffManCode.cpp : Defines the entry point for t...原创 2018-12-15 11:36:24 · 661 阅读 · 0 评论 -
二叉树中序遍历(非递归)算法实现--C语言
今天继续二叉树的学习。昨天写了一遍二叉树的先序遍历(非递归)算法,今天写一下二叉树的二叉树的中序遍历(非递归)算法。中序遍历的非递归算法有两种,但是个人觉得只要掌握一种就可以了,只要自己的逻辑清晰,会哪一种又有什么关系呢~首先给出今天的二叉树的示例图:代码如下:// InOrderBiTreeTraverse.cpp : Defines the entry point for the c...原创 2018-12-14 10:50:25 · 20495 阅读 · 5 评论 -
二叉树先序遍历算法--C语言
第一次在优快云上写博客,今天开启自己的编程之路。以前总觉得上课嘛,把老师讲的东西学会,考试能过就好了。但是后来发现,自己被这种想法坑惨了。知识点当时是学会了,但是随着考试的结束,学到的知识也一并还给了老师!!!这对于找工作的我来说,打击相当之大。现在下定决心要好好学习,重拾忘掉的知识。先从二叉树开始吧!今天看了二叉树的先序遍历,便尝试着写了二叉树的先序遍历算法(非递归)。以下代码为已经编译运行...原创 2018-12-13 17:27:34 · 7893 阅读 · 5 评论 -
排序算法小结
内部排序算法性能小结 内部排序按排序过程中依据的不同原则,则大致可分为:插入排序:从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列中的正确位置上的排序方法。交换排序:当每两个元素比较出现逆序时,就相互交换位置的排序方法。选择排序:从未排序序列中挑选元素,并将其放入已排序序列的一端的方法。归并排序:依次将每两个相邻的有序表合并成一个有序表的排序方法。基数排序...原创 2019-02-20 11:38:58 · 372 阅读 · 0 评论 -
简单选择排序
时隔一个多月,再次写代码果然手生。这一个多月,自己过的很艰难原创 2019-02-13 17:46:38 · 182 阅读 · 0 评论
分享