算法
Ray_Cheng
这个作者很懒,什么都没留下…
展开
-
队列使用示例
#include <stdio.h>#include <stdlib.h>#include <string.h>#include "board.h"//队列设计struct _node_{ rx_msg_t rx_msg; struct _node_ *next;};typedef struct{ struct _node_ *front; ...原创 2018-06-12 16:07:08 · 454 阅读 · 0 评论 -
求最大公因子
#include <stdio.h>int maxog(int m, int n){ int r = 0, k, j; if(m == n) return n; (m - n > 0) ? (k = m, j = n) : (k = n, j = m); r = k % j; //如果此处刚好能够整除,说明j就是最大公因子, print...原创 2018-06-19 15:09:19 · 1833 阅读 · 0 评论 -
选择排序
int sort(int *a, int n) //选择排序{ int i = 0, j = 0, k = 0; for(i = 0; i < n - 1; i++) { k = i; //假设第0个元素当作最小的元素 for(j = i + 1; j < n; j++) //每轮循环其实和结束条件跟冒泡排序不一样 { ...原创 2018-06-15 16:43:48 · 131 阅读 · 0 评论 -
冒泡排序
void sort(int *a, int n) //冒泡排序{ int i = 0, j = 0; for(i = 0; i < n - 1; i++) //n个数,需要拍n - 1轮 { for(j = 0; j < n - 1 -i; j++) // 每轮需要排 n - 1 -i次 { if(a[j] > ...原创 2018-06-15 16:42:55 · 127 阅读 · 0 评论 -
输出直角杨辉三角
#include <stdio.h>int main(void){ int i, j; int a[10][10]; printf("\n"); for(i = 0; i < 10; i++) { a[i][0] = 1; //每行首元素都是1 a[i][i] = 1; //对角线是都是1 } for(i = ...原创 2018-06-15 16:41:33 · 1118 阅读 · 1 评论 -
二分查找
#include <stdio.h>/* * 每次循环取中间值作为比较对象,若给定值与中间值相等,则查找成功; * 若给定值小于中间值,则在中间值的左半区继续查找 * 若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。*/int binary_search(int *a, int n, int key) //二分查找,n是有数组有效元素的个数,key是要查找的数{ in...原创 2018-06-15 16:40:03 · 144 阅读 · 0 评论 -
获得文件某一行的内容
char *get_line(char *argv, int n) //获得文件某一行的内容,argv是文件名,n是行号{ static char buf[512]; int i = 0; if(0 == n) return NULL; memset(buf, 0 , sizeof(buf)); //清零的目的是为了可重入时上次的结果不影响本次 FILE...原创 2018-06-12 16:28:10 · 486 阅读 · 0 评论 -
删除字符串中的多余空格
char *delete_space(char *a)//删除字符串首尾空格,并把中间多余一个的空格去掉{ int i = 0, j = 0, l = 0, k = 0; static char c[128]; memset(c, 0, sizeof(c));//清零的目的是为了可重入时上次的结果不影响本次 /*char buf[128] = {0};*/ /*str...原创 2018-06-12 16:30:34 · 1477 阅读 · 0 评论 -
递归求斐波那契数列
int f[100] = {0};int fib(int n) //递归求斐波那契数列{if(0 == n || 1 == n) //重要的是n为0或1时,要返回1,否则有错Return1;else if(n > 1)return fib(n - 1) + fib(n - 2); //当前项等于前两项之和} int test(int n) //递归求斐波那契数列,n是多少个{Int i =...原创 2018-06-12 16:26:12 · 187 阅读 · 0 评论 -
递归求阶乘
int add(int n) //递归求1 + 100{if(n <= 0) return 0;else if(1 == n) return 1;else return n + add(n - 1);} long fac(long n) //递归求阶乘{if(n <= 0) return 0;else if(1 == n) return 1;else return n * (n ...原创 2018-06-12 16:24:52 · 3177 阅读 · 1 评论 -
快速排序方法2
void quick_sort(int *a, int low, int high) //快排,low为数组最小下标, high为最大下标{ int tmp = a[low], l = low, h = high; //以最小下标元素做为参考枢轴 if(low >= high) //递归返回条件 return; while(low < high) ...原创 2018-06-12 16:22:55 · 187 阅读 · 0 评论 -
快速排序方法1
#include <stdio.h>/* * 快速排序( Quick Sort) 的基本思想是:通过一趟排序将待排记录分割成独立的 * 两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部 * 分记录继续进行排序,以达到整个序列有序的目 */int partition(int *data,int low,int high){ int t = 0; t ...原创 2018-06-12 16:21:56 · 108 阅读 · 0 评论 -
链表逆置
void linklist_inverse(node_t **p) //链表逆置{ node_t *tmp, *tmp1; if(is_empty(*p)) //判空 return; tmp1 = tmp = (*p)->next; //tmp和tmp1分别指向第一个有效节点(*p)->next = NULL; //将表头和链表节点断开,这一步...原创 2018-06-12 16:19:10 · 350 阅读 · 0 评论 -
约瑟夫问题
joseph问题: 设编号分别为:1,2,...,n的n个人围坐一圈。约定序号为k(1<=k<=n)的人从1开始计数,数到m的那个人出列,他的下一位又从1开始计数,数到m的那个人出列,依次类推,直到所有人出列为止。#include <stdio.h>#include <stdlib.h>#include <string.h>typedef in...原创 2018-07-03 10:08:26 · 204 阅读 · 0 评论