数据结构 与 算法
文章平均质量分 90
tiny丶
这个作者很懒,什么都没留下…
展开
-
平衡二叉树
平衡二叉树又称AVL树。它或者是颗空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。若将二叉树节点的平衡因子BF定义为该节点的左子树的深度减去它的右子树的深度,则平衡二叉树上所有节点的平衡因子只可能为-1,0,1.只要二叉树上有一个节点的平衡因子的绝对值大于1,那么这颗平衡二叉树就失去了平衡。假设我们已经有棵平衡二叉树,现在让我原创 2014-05-19 17:02:24 · 890 阅读 · 0 评论 -
哈希实现
/**一、哈希函数 1. 将节点保存在FILE_NODE中,以链地址法,加入全局Hash表2. 使用FILE_NODE作为结点,实现一个全局Hash表3. 采用除留余数法,表长为P,取P=5 散列函数为 H (key)=key % P;4. 使用size作为key5. 实现查找某个文件的操作6. 实现对Hash表的遍历函数**data: 2015-10-22 **b原创 2015-10-22 14:59:11 · 714 阅读 · 0 评论 -
linux内核链表分析与实践
linux内核中有很多用的很经典的数据结构,链表就算其中之一,还有队列,哈希查找,红黑树查找等等,链表的设计很经典,就连很多开发内核的黑客们都觉得内核中链表的设计是他们引以自豪的一部分。我觉得内核链表的好主要体现为两点,1是可扩展性,2是封装。可扩展性肯定是必须的,内核一直都是在发展中的,所以代码都不能写成死代码,要方便修改和追加。将链表常见的操作都进行封装转载 2015-10-20 14:27:33 · 432 阅读 · 0 评论 -
IP、ICMP、UDP、TCP 校验和算法
以前看计算机网络相关的书,每次看到IP或者UDP报头校验和时,都一瞥而过,以为相当简单,不就是16bit数据的相加吗。最近在研究《TCP/IP详解 卷1:协议》这本书,看到校验和是16bit字的二进制反码和(晕,以前都没注意原来是反码和,看来以前看书不仔细啊!罪过,罪过~~),觉得很奇怪,为什么会用反码和,而不是直接求和呢?(因为我认为TCP/IP协议里面的算法和思想一般都是非常经典的,人家这么做转载 2015-07-22 15:02:41 · 830 阅读 · 0 评论 -
c语言 快速排序 和 二分 查找 模型
引言:c语言中 stdlib 自定义了一个 qsort 快速排序函数 模型:int cmp(const void *a,const void *b);qsort(s,n,sizeof(s[0]),cmp);示例代码://#include#includeint cmp(const void* a, const void* b){ retu原创 2015-07-10 11:37:51 · 746 阅读 · 0 评论 -
内部排序法小结
1.冒泡排序(Bubble Sort)冒泡排序方法是最简单的排序方法。这种方法的基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即“轻”的元素在下面,就交换它们的位置。显然,处理一遍之后,原创 2015-07-11 20:54:21 · 568 阅读 · 0 评论 -
链表 操作3 双向链表的 插入排序法
昨天做了某公司的数据结构笔试题:其中一个小功能 是要求对 双向链表进行 快速排序。 思想:借用了 nginx 链表排序思想 head prev next 假设: 从小到大排序从链表的 第二个 元素 head->next , 开始, 1)首先删除该节点 在链表中的位置(但是不删除该节点) 2)逐次向前遍历链表 如果 比原创 2015-04-18 14:06:50 · 2587 阅读 · 0 评论 -
用 union 将 单链表 模块化
代码如下:#include#include#includetypedef unsigned int uint32_t;typedef char uint8_t;typedef unsigned short uint16_t;typedef struct _BOOK{ char name[32]; uint32_t price;}Book;typede原创 2015-07-10 15:12:28 · 1052 阅读 · 0 评论 -
经典面试题 之 递归调用 几个经典示例
1、 求算1-100 #include int fun(int n, int &sum) { n && fun(n - 1, sum); return (sum += n); } int main() { int sum = 0; int n = 100; printf("1+2+3+...+n=%d\原创 2013-07-17 17:00:45 · 1918 阅读 · 0 评论 -
链表操作2 避免内存开销
目的: 申请一段 连续的 内存, 填充内存 达到链表的插入, 之后的操作就像操作 数组一样, 在多次需要这段内存的时候,就避免了内存上的开销局限:对未知大小的,用这种方法填充,会造成越界的错误。代码:#include#include#include#include#include#includetypedef struct LCF{原创 2015-04-16 10:13:28 · 890 阅读 · 0 评论 -
数据结构---nginx-1.7.12源码分析 (双向链表)
// 完美分析 请见: http://blog.csdn.net/chen19870707/article/details/40371047Ngx_queue.h/** ngx-queue.h * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */#include #include #ifn原创 2015-04-18 15:00:59 · 766 阅读 · 0 评论 -
c语言 之 双向链表 简单操作
==============================版权 所有 vevenlcf 梦想专栏 ==================================/** 双向链表的简单操作* author: vevenlcf* created: 2015-02-12 14:54 pm*/#include#include#include#define原创 2015-02-12 14:55:18 · 687 阅读 · 0 评论 -
如何判断链表中是否有环
今天面试被问住了,很惭愧啊,回来上网查了一下思路。自己写了点程序。1.如何判断是否有环?如果有两个头结点指针,一个走的快,一个走的慢,那么若干步以后,快的指针总会超过慢的指针一圈。2.如何计算环的长度?第一次相遇(超一圈)时开始计数,第二次相遇时停止计数。3.如何判断环的入口点:碰撞点p到连接点的距离=头指针到连接点的距离,因此,分别从碰撞点、头指针开始走,相遇转载 2016-07-26 09:24:14 · 502 阅读 · 0 评论