![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 64
kuweicai
这个作者很懒,什么都没留下…
展开
-
C语言-数据结构-循环链表实例-维吉尼亚(vigener)密码源代码
1. 背景介绍维吉利亚密码维吉尼亚密码引入了“密钥”的概念,即根据密钥来决定用哪一行的密表来进行替换,以此来对抗字频统计。假如以上面第一行代表明文字母,左面第一列代表密钥字母,对如下明文加密:TO BE OR NOT TO BE THAT IS THEQUESTION当选定RELATIONS作为密钥时,加密过程是:明文一个字母为T,第一个密钥字母为R,因此可以找到在R行中代替T原创 2016-07-03 23:20:42 · 1471 阅读 · 0 评论 -
C语言-数据结构-归并排序(merge sort)-递归 迭代-源代码及分析
1. 归并排序归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序常用递归的方式实现,但是由于递归的固有缺陷,比如占用较大的运行空间,有些场合也会用迭原创 2017-01-25 21:30:06 · 9027 阅读 · 4 评论 -
C语言-数据结构-堆排序(heap sort)-源代码
1. 堆排序堆排序的定义及思想可以参考百度百科:堆排序用一句概括,堆排序就是一种改进的选择排序,改进的地方在于,每次做选择的时候,不单单把最大的数字选择出来,而且把排序过程中的一些操作进行了记录,这样在后续排序中可以利用,并且有分组的思想在里面,从而提高了排序效率,其效率为O(n*logn).2. 源代码堆排序中有两个核心的操作,一个是创建大顶堆(或者小顶堆,这里用的是大顶堆...原创 2017-01-24 21:07:54 · 12792 阅读 · 9 评论 -
C语言-数据结构-希尔排序(shell sort)-源代码
1. 希尔排序及其时间复杂度希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。用一句话概括原创 2017-01-21 17:00:00 · 1332 阅读 · 0 评论 -
C语言-数据结构-插入排序及优化-源代码
1. 插入排序的定义及复杂度插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。其时间复杂度为O(n^2)。2. 源代码运行结果如下图所示。#include<stdio.h>void insertsort(int a[], int n){ int i, j, temp, c1=0; for(i=1...原创 2017-01-16 22:47:50 · 1027 阅读 · 0 评论 -
C语言-数据结构-选择排序-源代码
1. 基本思想及时间复杂度简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。选择排序时间复杂度为O(n^2).2. 源代码#inc原创 2017-01-12 22:29:31 · 803 阅读 · 1 评论 -
C语言-数据结构-冒泡排序及优化-源代码
1. 冒泡排序定义及时间复杂度(来自百度百科)冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。若文件的原创 2017-01-12 21:06:14 · 2851 阅读 · 0 评论 -
C语言-斐波那契(Fibonacci)数列三种不同求法时间复杂度分析
方法一 递归提起斐波那契数列,首先想到的大概都是递归,但是其时间复杂度并非最优,其时间复杂度为O(2^N)。具体分析可以参考:Fibonacci方法二 循环递归之所以效率低下,是因为需要重复的计算一些中间变量。而利用循环可以通过存储中间变量来减小计算量,其时间复杂度为O(N)。方法三 矩阵乘法利用矩阵乘法加上分治的思想,可以将其时间复杂度降低到O(log2^n).具体的原创 2016-12-26 19:13:00 · 5338 阅读 · 0 评论 -
C语言-数据结构-快速排序及优化-源代码
1. 目标利用快速排序对一个数组中的数据进行排序2. 代码分析快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。3.时间复杂度分析原创 2016-12-18 17:08:36 · 1359 阅读 · 1 评论 -
C语言-统计二进制数中1的个数-Hamming weight-汉明权重问题
1. 目的写一个函数,以一个无符号整数为参数,返回其汉明权重。例如,‘11’的二进制表示为'00000000000000000000000000001011', 故函数应当返回3。汉明权重(Hamming weight):指一个字符串中非零字符的个数;对于二进制串,即其中‘1’的个数。这里多说一句,汉明距离(Hamming distance)是不同的概念,汉明距离是指两个等原创 2016-12-11 17:37:38 · 2035 阅读 · 0 评论 -
C语言-数据结构-骑士周游-马踏棋盘问题-源代码
1. 目标对于一个指定的起始坐标,按照‘马’的走棋规则,从该坐标开始搜索一条可以覆盖棋盘每个位置的走棋路径。例如下面是从(2,0)坐标开始搜索得到的一个解。2. 代码结构3. 源代码该代码仅仅是寻找到一条生路,即停止。另外对选择的起始点,和寻找下一点的顺序不同(即sposition()中case的顺序不同,对于程序执行的时间影响会很大)。另外程序中调用了time原创 2016-12-04 10:43:09 · 5109 阅读 · 2 评论 -
C语言-数据结构-哈夫曼编码-Huffman-源代码
1. 目标读取一段字符,生成哈夫曼编码,并输出。如下所示:2. 代码结构2.1 统计各个字符出现的次数,并排序;2.2 根据生成的哈夫曼树,生成哈夫曼编码;3. 源代码#include #include #include #define title "------------------------------Lif原创 2016-11-13 23:21:37 · 20299 阅读 · 5 评论 -
C语言-数据结构-线索二叉树-生成、遍历源代码
1. 目标按前序遍历的顺序生成一个二叉树(如下图1所示),然后按照中序遍历的顺序进行线索化,利用空余的左节点指向前驱节点,空余的右节点指向后续节点。最有利用迭代的方式将其输出。2. 运行示例其中函数HDThreadTree()后,二叉树的情形如下:3. 源代码程序流程图及代码如下。#include #include #define t原创 2016-10-25 23:08:54 · 1281 阅读 · 0 评论 -
c语言-数据结构-二叉树-生成、遍历代码
1. 目标生成一个二叉树,遍历输出二叉树中的内容,并显示所在的层级。2. 运行示例输入如下图二叉树(前序遍历方式),不存在的子节点用空格代替。显示如下。3. 源代码需要的注意的是,这里利用递归的方式动态分配内存,需要用指向指针的指针(也可以利用返回指针的方式)才能工作。#include#define title "-------原创 2016-09-17 22:47:52 · 9816 阅读 · 5 评论 -
C语言-字符串匹配-KMP算法及next数组求解和运用实例
1. 目标求解一个目标串的next数组,运用next数组寻找s串中是否有T串,没有返回-1,如果有返回s的下标值。2. 运行示例如下:3.代码分析对next数组的求解代码比较难以理解。 可以参考 北京小王子 的微博,写的比较详细。点击打开链接(http://www.cnblogs.com/tangzhengyue/p/4315393.html)原创 2016-09-04 22:55:14 · 2216 阅读 · 0 评论 -
C语言-数据结构-递归求解实例-8皇后问题
1. 目标运用递归对8皇后问题进行求解(也可以推广到n皇后问题),输出每种棋子放置的位置和解的总数。2. 运行示例以4皇后问题为例。3. 源代码#include#define title "------------------------------Life is a fight!----------------------------------原创 2016-08-09 14:40:14 · 1107 阅读 · 0 评论 -
C语言-数据结构-栈运用实例-计算器源代码
1. 目标编写一个支持浮点数及括号的加减乘除计算器。输入:中缀表达式输出:后缀表达式及计算结果注意:该代码在VS13上运行通过。运行示例:2. 实现流程2.1 中缀表达式转换为后缀表达式请参考如下链接:点击打开链接3. 源代码#include#include#include#define stacksize 30#原创 2016-07-27 23:02:45 · 15371 阅读 · 1 评论