c数据结构
守护砂之国泰裤辣
既然已经走这么远了,那么不妨再走远一点...
展开
-
数据结构c语言实现-链表(带和不带头节点)
数据结构与算法分析——c语言描述第3章 第二节 表1.带头结点(原书) 稍微改造一下#include <stdio.h>#include <stdlib.h>st...原创 2017-03-06 17:13:28 · 1677 阅读 · 0 评论 -
C语言递归算法系列_ 逆序和正序输出一个整数的每位数 (1)
这是一个简单的问题,也是递归里面比较典型的例子。那么从这里开始我们的递归之旅。参考书籍《数据结构与算法分析 C语言描述》 《Java程序设计 基础、编程抽象与算法策略》 先谈谈递归,递归的一般解释为将问题分解为更简单的具有类似解决方法子问题,更小子问题解决后将结果一步步返还给原始问题。这个过程通俗来讲就是函数自己调用自己。用递归解决问题的过程体现了分而治之的算法策略。递归解题的一般步原创 2018-02-05 00:20:24 · 13151 阅读 · 3 评论 -
C语言递归算法系列_辗转相除(欧几里得法)求最大公约数(3)
这一次我们同时使用递归与循环解决问题。求最大公约数,最经典的方法莫过于辗转相除法,也叫欧几里得法。其计算原理依赖于下面的递推式: gcd(m, n) = gcd(n, m mod n)整数m、n的最大公约数等于n和m除以n的余数的最大公约数。 开始我们的递归分析:1.简单情况, m % n == 0, 此时n就是m和n的最大公约数,直接返回。2原创 2018-02-05 16:43:05 · 4287 阅读 · 0 评论 -
c语言递归求1+2+...加到100的和
有些函数式编程语言是没有循环的,如Lisp。那么高斯同学的1+2+3+...+100如何用递归求解呢?下面给出递归算法求高斯同学的5050:#include <stdio.h>int add(int n){ if (n < 1) return 0; return n + add(n - 1);}int main(void){ ...原创 2018-02-13 17:50:19 · 14566 阅读 · 2 评论 -
C语言递归算法系列_打印杨辉三角 循环与递归同时使用(4)
杨辉三角又名Pascal三角。其结构存储在一个二维数组里可以当成一个下三角矩阵。其核心是 每行的行首元素和对角线元素(行列坐标相等)的情况下存储数字1,其它情况下为其腰上的两个元素之和。下面我们就从循环和递归两种方法打印杨辉三角。1.循环,唯一遇到的困难就是二维数组传参,我为了简便,用了全局变量!#include <stdio.h>int a[10][10];void cyan...原创 2018-02-08 10:37:23 · 1760 阅读 · 0 评论 -
C语言递归算法系列_尾递归求阶乘和斐波那契数列(5)
我们将以两个经典问题为例子,升级我们的递归成为尾递归。尾递归顾名思义就是尾处递归,其实不然。就我的理解,就是将递归函数多加了几个参数,并将结果保存在参数中,这就略去了函数回调的代价。以往我们求斐波那契(假设从0开始,0,1,1,2......),基本就是按照递归式子来求:if (n == 1) return 0;else if (n == 2) return 1;return fib(n -...原创 2018-02-08 10:49:46 · 883 阅读 · 0 评论 -
C语言递归算法系列_循环实现逆序和正序输出一个整数的每位数 (2)
在上一篇中,我们用递归实现输出一个整数的每位数,这次我们用循环来实现这,并且对比两者的特点。话不多说,先上代码(没怎么优化代码,尤其是正序输出的那个函数,用到了三个循环)#include <stdio.h>void order_print(int n){ int nCount = 1, temp = n; while(temp / 10) { nC...原创 2018-02-08 10:51:22 · 3568 阅读 · 0 评论 -
C语言递归算法系列_汉诺塔(6)
这次我们接触一个抽象程度更高的递归问题,hanoi塔。问题描述为:汉诺塔是由三根杆子A,B,C组成的。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:每次只能移动一个圆盘;大盘不能叠在小盘上面。这个问题在显示中还真没什么用处,但是基本讲解递归问题就会把它拿出来。既然是递归,那我们还是按照分析递归问题的步骤来。我们设定这样的函数原型void hano...原创 2018-02-08 11:22:11 · 489 阅读 · 2 评论