数据结构与算法
文章平均质量分 75
gronimo
Just for fun.
展开
-
静下心来写算法(之栈)
以前做过一个C语言作业,题目是反转字符串的,当时第一个想法就是用栈实现,后来看了答案才发现有点大材小用了。。。 栈绝不只是反转字符串、进制转换、判断符号平衡这些作用,貌似还是函数调用、递归调用的基础,的确应该好好练习一下。栈1.先进后出表先进去的被压入栈底,最后入栈的数据在栈顶,只能从最上面一个一个取数据。2.栈的长度要看栈顶的高度1)设计栈的节点原创 2012-10-05 11:45:06 · 327 阅读 · 0 评论 -
静下心来写算法(之循环队列)
在循环队列里,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。因此,不能通过条件front==rear来判别队列是"空"还是"满"。 解决这个问题的方法至少有两种: 1. 另设一布尔变量以区别队列的空和满; 2.另一种方式就是数据结构常用的: 队满时:(rear+1)%n==front,n为队列长度,所以可用的长度为n-1,这个要注意。原创 2012-10-06 00:13:20 · 452 阅读 · 0 评论 -
静下心来写算法(之单向链表)
像大部分同学一样,上学期的C语言课程设计里有个《学生信息管理系统》的题目,令人汗颜的是不少同学直接定义了一个大数组;当然老师也挺仁慈的,并不介意,毕竟实现了需求,而且代码写起来也简单多了,何乐而不为呢。 但是!但是!咱能不能专业点?也许系统配置没那么好,也许只有1KB的可用内存(尤其是缺乏资源的单片机上),这时候就要用到链表了。链表:顾名思义就是把数据像链子一样串起来的一个表(ht原创 2012-10-04 19:47:33 · 456 阅读 · 0 评论 -
静下心来写算法(之双向链表)
据说Linux内核里广泛应用了一种叫做双向循环链表的东西,听起来很高端的样子,像是是双链表的头尾节点连在一起了,以后用空在研究吧。下面还是练习下今天的双向链表吧,先不循环了。 双向链表比起单向链表貌似就是多了个前驱指针,使得对数据的操作更加方便了,可以方便的访问父节点而不用从头结点一个一个找了。但是代价还是不小的,每个结点都多出了4字节(32位系统上是这样的,其它平台还不清楚)的内存占原创 2012-10-05 00:15:20 · 447 阅读 · 0 评论 -
静下心来写算法(之二叉树)
相信大家考计算机二级时都背过这个关于二叉树的概念,不过只有自己动手写出来时才会发现它的奇妙之处。先巩固一下概念:二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有个结点;深度为k的二叉树至多有个结点;对任何一棵二叉树T,如果其终端结点数为,度为2的结点数为,则。1)二叉树数据结构 typedef st原创 2012-10-06 10:49:56 · 378 阅读 · 0 评论 -
静下心来写算法(之简单排序算法)
被快排整的头疼,以后再写,先写三个简单的排序(冒泡、选择、插入)轻松一下吧先看一下对几种排序算法的测试结果/** 对10万随机数排序测试结果:** 速度排名 算法 平均时间 ** 1 quick_sort 12 ms * 2 qsort 15 ms * 3 inse原创 2012-10-06 11:33:49 · 438 阅读 · 0 评论 -
静下心来写算法(KMP算法)
好吧,我承认,这个算法真的很不好理解(应该是水平有限吧)。一开始,从严蔚敏的那本书上看了KMP算法,一开始没看懂,后来看了几遍还是没看懂,发现这个next数组挺神奇的,算法的原理其实不难,难的就是那个巧妙的next数组,花了很长时间思考这个数组。1)算法介绍 KMP算法解决的问题是字符匹配,是由Knuth–Morris–Pratt共同开发出来的,这个算法把字符匹配的时间复杂度缩小到原创 2012-10-12 23:18:47 · 766 阅读 · 0 评论