数据结构和算法
痞子晶
大部分事情并不需要什么天赋或者激情才能完成,只要有切实可行的目标、合理的计划和风雨无阻的执行力就够了。
展开
-
动手敲算法——前言
很多人都有眼高手低的毛病,很多的算法,数据结构,讲到的话滔滔不绝,但是实际让他敲一敲,就会出现这样难的问题。包括我自己也是这样,昨天晚上用快排库函数qsort时,突发奇想,想自己实现。然后,晚上花了一个多小时时间,遇到各种问题,最后不得不翻出数据结构课本,仔细的回顾了一遍,才解决。完成之后,我想了一下,很多的算法我感觉自己会写,但是真的能又快又准确的敲出来吗?于是便有了把一些常用的,学过的,现在生疏原创 2016-09-09 11:28:39 · 239 阅读 · 0 评论 -
动手敲算法——快速排序
#include <stdio.h>void swap(int *x,int *y) //交换两个数 { *x = *x + *y - (*y = *x); //不用参数实现两个数交换 // int teleftp; // teleftp = *x; // *x = *y; // *y = teleftp; }int midian3(int *a,int left,int原创 2016-09-09 11:31:12 · 325 阅读 · 0 评论 -
动手敲算法——归并排序
#include <stdio.h>void Merge(int *a,int left ,int right,int rightend) //只能作用于有序的数组排序 { if((NULL == a)) { return; } int temp[rightend+1]; int i = left; //注意,赋值原创 2016-09-10 13:18:27 · 304 阅读 · 0 评论 -
约瑟夫问题(循环链表实现)
刚刚写好,原理很简单,重点是链表的建立和节点的删除,注意:要养成删除的节点后,释放申请的内存的好习惯:) 代码如下: /*约瑟夫环:n个人坐一圈,从1到n给每个人编号。从m个人开始报数,数到第k个人,让他出局。 然后从出局后下一个人开始报数,同样是第k个人,再让他出局,如此的反复,直到剩下最后一人。 问题求剩下一个人编号是多少?(链表实现)*/ #include #include原创 2016-09-01 00:52:06 · 772 阅读 · 0 评论 -
动手敲代码——递归(汉诺塔问题)
/*N阶汉诺塔递归实现:如果将n个盘子(由小到大)从a通过b,搬到c,移动的规则如下:这些圆形盘只能在3个塔问进行移动.一 次只能移动一个盘子,且任何时候都不允许将较大的盘子压在比它小的盘子的上面。*///思路:把n-1个盘子移动到b柱子上,然后把第n个盘子移动到c柱子上,最后把n-1个盘子移动到c柱子上#include <stdio.h>int i = 0;void move(int n,cha原创 2016-09-10 20:52:41 · 378 阅读 · 0 评论 -
动手敲代码——栈(经典问题练习)
/*用栈实现计算器*/ /*经典的用来练习栈的题目,需要借助逆波兰表达式*/#include <stdio.h> #include <stdlib.h> #include <assert.h>#define MAXSIZE 64 #define OK 1 #define ERROR 0typedef struct { int data[MAXSIZE]; int top; }sta原创 2016-09-19 00:05:18 · 965 阅读 · 0 评论 -
动手敲代码——链表(C语言实现)
已经经过测试,放心可用。 刚刚想起,前几天看的一篇文章说,链表用递归实现更简介,没有当时很奇怪,但是也没有深究,文中是用java实现的。最近比较忙,等有空我也来试试。/*链表的简单操作*/ #include <stdio.h> #include <stdlib.h>#define OK 1 #define ERROR 0int num = 0;typedef struct Node {原创 2016-09-20 20:59:05 · 391 阅读 · 0 评论