数据结构
文章平均质量分 84
Flyhigh
海阔凭鱼跃,天高任鸟飞
展开
-
KMP匹配算法
在开发中,经常会遇到在一个字节数组中,查找一个子数组的问题。如果不是字节数组,而是字符串的话,直接通过 string.IndexOf 就可以解决,对于字节数组还是需要做一点功课。 因为字符串比较容易观察,所以,我们首先通过字符串来分析,然后,再在字节数组上实现。 问题: 对于一个源字符串 source = "abababaababacb" 来说,查找其中包含子原创 2013-06-05 10:24:14 · 702 阅读 · 0 评论 -
汉诺塔--(数据结构)
我的数据结构学习从汉诺塔开始,这个简单的算法我可是整整想了一晚上,现在终于有点明白了,上机单步了几遍,有所了解,,还是写点什么以供以后参考,也希望能对正在学算法的盆友有所裨益······ 总得来说汉诺塔就是层叠递归调用的典型例子,一直是利用A—>B A-->C B-->C这样的单个步骤。 具体来说,当盘数大于一时,不违背原则下(过程中总是大在下小的在上)原创 2013-06-18 15:39:09 · 990 阅读 · 0 评论 -
迪杰斯特拉算法--数据结构
Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。 Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。 其基本思想是,设原创 2013-06-18 22:44:07 · 1092 阅读 · 0 评论 -
等待队列(二)
通过 前一篇文章 的介绍我们队等待队列有了一个比较具体的认识,本文将来分析一下等待队列是如何睡眠一个进程和如何唤醒一个进程的。 使用等待队列前通常先定义一个等待队列头:static wait_queue_head_t wq ,然后调用wait_event_*函数将等待某条件condition的当前进程插入到等待队列wq中并睡眠,一直等到condition条件满足后,内核再将睡眠在等待队列wq上的原创 2013-07-31 14:35:18 · 695 阅读 · 0 评论 -
等待队列(一)
在Linux内核中等待队列有很多用途,可用于中断处理、进程同步及定时。我们在这里只说,进程经常必须等待某些事件的发生。等待队列实现了在事件上的条件等待: 希望等待特定事件的进程把自己放进合适的等待队列,并放弃控制全。因此,等待队列表示一组睡眠的进程,当某一条件为真时,由内核唤醒它们。 等待队列由循环链表实现,其元素包括指向进程描述符的指针。每个等待队列都有一个等待队列头(wait queue h原创 2013-07-31 14:33:38 · 690 阅读 · 0 评论 -
C语言运算符的优先级
优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 () 圆括号 (表达式)/函数名(形参表) . 成员选择(对象) 对象.成员名原创 2013-08-02 11:44:57 · 710 阅读 · 0 评论 -
Linux中的工作队列
工作队列(work queue)是Linux kernel中将工作推后执行的一种机制。这种机制和BH或Tasklets不同之处在于工作队列是把推后的工作交由一个内核线程去执行,因此工作队列的优势就在于它允许重新调度甚至睡眠。 工作队列是2.6内核开始引入的机制,在2.6.20之后,工作队列的数据结构发生了一些变化,因此本文分成两个部分对2.6.20之前和之后的版本分别做介绍。 I、原创 2013-08-27 18:29:29 · 595 阅读 · 0 评论