数据结构与算法
jerry_chg
努力 奋斗
展开
-
Bit-Map算法的简单实现
BitMap的定义:所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。 使用bitmap实现8位电话号码的存储,能够实现电话号码的插入、删除、查找。使用bitmap算法。8位电话号码总共有0-99999999个号码,每位代表一个电话号码,需要12500000个字节的内存来存储电话号码实现过原创 2012-09-28 20:48:07 · 4914 阅读 · 0 评论 -
使用快慢指针判断单链表是否存在环
让快慢指针从链表头开始遍历,快指针向前移动两个位置,慢指针向前移动一个位置;如果快指针到达NULL,说明链表以NULL为结尾,不是循环链表。如果快指针追上慢指针,则表示出现了循环。 C语言实现如下:int find_loop_in_list(list_node *head){ list_node *fastp, *slowp; int i原创 2013-08-24 11:14:41 · 1061 阅读 · 0 评论 -
shell排序的c实现
shell排序是插入排序的一种,是插入排序的一种高速而稳定的改进版本,先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成(n除以d1)个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2 该方法实质上是一种分组插入方法。下面是c实现与执行结果#include#include#include原创 2012-10-20 20:55:28 · 1598 阅读 · 0 评论 -
快速排序算法的c语言实现
快速排序是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 对于基准数的选择,本程序使用中间值作为基准数,下面是程序实现:#include#include#in原创 2012-10-16 21:36:49 · 1110 阅读 · 0 评论 -
选择排序的c实现
原理:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法实现:#include#include#includevoid select_sort(int value[], int length){ int i = 0; int j = 0; int flag;原创 2012-09-23 20:59:36 · 1209 阅读 · 0 评论 -
插入排序的c实现
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置c实现如下:#include原创 2012-09-23 20:54:19 · 2963 阅读 · 0 评论 -
冒泡排序算法的c语言实现
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2原创 2012-09-23 20:49:30 · 7093 阅读 · 0 评论 -
链表的c语言实现以及根据linux内核中链表的实现过程
链表,就是用一组任意的存储单元存储线性表元素的一种数据结构。链表又分为单链表、双向链表和循环链表等。下面代码是链表的两种实现方式,其中方式一就是按照数据结构书中对链表的实现过程,而方式二是根据linux内核中关于链表的实现。两者的最大区别是方式一中数据是存储在链表结构中的,而方式二中,是在数据结构中包含链表结构的。个人更倾向于第二种实现方法。链表在内核中的使用例子,在驱动层我们可以原创 2012-09-23 20:36:04 · 4062 阅读 · 0 评论 -
ITU-T I363.5 CRC32校验的C实现
上一篇关于CRC32校验的文章是对标准CRC32算法的实现,这篇文章是对I363.5标准中的CRC32算法的实现对于标准CRC32算法的实现,主要是因为要对软件升级使用的,主要是对开发板升级前确定接收的升级内容是正确的;而对于ITU-T I363.5中CRC32算法的实现,主要是用于GPON中的OMCI消息互通,GPON OMCI消息是通过ITU-T I363.5的CRC32进行校验的,其原创 2012-09-30 16:36:04 · 4505 阅读 · 1 评论 -
bit-map算法在linux内核中的应用
在内核中使用bit-map算法,并不是用来处理大数据,其中的一种应用就是任务优先调度,将任务的优先级用bit位来表示,假如设置优先级位32个(0-31),则内核会从最高优先级0开始执行任务(TASK),当优先级为0的所有任务执行完后再执行优先级1的,以此依次执行下去(还可在优先级的基础上加入时间片)。对于每个任务优先级,可以使用链表将该优先级的所有任务(TASK)都放在链表指针上,执行时从原创 2012-09-30 16:01:43 · 1390 阅读 · 0 评论 -
Linux Hash list相关的知识学习
Linux Hash list相关的知识学习在看桥接、路由代码时,经常会有hash表相关定的结构,为了能够更好的理解桥接、路由的代码,所以需要好好的理解hash链表一、相关数据结构数据结构:struct hlist_head { structhlist_node *first;}; struct hlist_node { structhlist_no原创 2014-02-26 21:58:05 · 3714 阅读 · 0 评论