摘要: 0.前言前文已经叙述道,linux中链表的实现是节点与数据分离,如果要使用链表,只需在数据结构中包含链表的结构(非指针)即可。struct nf_sockopt_ops的定义为struct nf_sockopt_ops { struct list_head list; u_int8_t pf; …… int ( * set )( struct sock * sk, int optval, void __user * user, unsigned int len); …… int ( * compat_get)( struct sock * sk, int optval, void __user 阅读全文
posted @ 2011-04-08 15:43 westfly 阅读(1599) 评论(0) 推荐(0) 编辑
摘要: 网上关于list的源码分析很多,这里只是学习做比较。list的数据结构定义/* *双链表 */ struct list_head { struct list_head * next, ** prev; }; 或许我们比较习惯如下的形式struct list_head { struct list_head * next; struct list_head * prev; }; 前文已经说明,这与传统的经典定义有差异,只有链接指针,而无数据节点。这样做是为了带来数据定义的通用性。在C++中,使用模板技术来实现,而C中并没有相关的技术,那么如何访问到节点上的数据呢,成为面临的挑战之一。1.声明关于的 阅读全文
posted @ 2011-04-08 15:36 westfly 阅读(1450) 评论(0) 推荐(0) 编辑
摘要: 以下分析文字转载自《程序员面试题精选100题(36)-在字符串中删除特定的字符》题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。分析:这是一道微软面试题。在微软的常见面试题中,与字符串相关的题目占了很大的一部分,因为写程序操作字符串能很好的反映我们的编程基本功。要编程完成这道题要求的功能可能并不难。毕竟,这道题的基本思路就是在第一个字符串中拿到一个字符,在第二个字符串中查找一下,看它是不是在第二个字符串中。如果在的话,就从第一个字符串中删除。但如何能 阅读全文
posted @ 2011-04-08 15:13 westfly 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。分析:如果我们不考虑时间复杂度,最简单想法的莫过去先在数组中固定一个数字,再依次判断数组中剩下的n-1个数字与它的和是不是等于输入的数字。可惜这种思路需要的时间复杂度是O(n2)。但是上述策略并没有考虑到数组是有序的特性。此处是不是可以在有序的基础上作工作呢?思路如下:找到数组的第一个数字和最后一个数字。当两个数字的和大于输入的数 阅读全文
posted @ 2011-04-08 15:01 westfly 阅读(2812) 评论(0) 推荐(1) 编辑
摘要: 转载自《Linux中的工作队列》http://blog.chinaunix.net/space.php?uid=487105&do=blog&cuid=971040[前记]Linux自从2.6.20之后,工作队列发生了一些变化,目前从网络上搜索的资料一般都是介绍老版本的工作队列,很少见到对新版本的介绍。本文对新老版本都做了简要概述,并分别提供了简单的实作案例。*************************************************************************************************************** 阅读全文
posted @ 2011-04-08 09:47 westfly 阅读(353) 评论(0) 推荐(0) 编辑