![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 80
践行者John
一个资质一般却一直在努力的程序员。
展开
-
布隆过滤器
Bloom Filter是一种空间利用率很高的随机数据结构,它用位数组很简洁地表示一个集合,并能判断一个元素是否包含于该集合。Bloom Filter用一定的代价换取这种高效:在判断一个元素是否包含于该集合时,有一定的几率(即误判率 false positive rate)产生误判(false positive)。因此,Bloom Filter不合适那些“零错误”的应用场合。在能容忍低错误率的应用原创 2013-11-05 01:34:32 · 624 阅读 · 0 评论 -
交换排序
交换排序的基本思想是:两两比较待排序元素,如果发现次序相反则进行交换,直到没有反序为止。应用交换排序基本思想的两种排序是冒泡排序与快速排序。一.冒泡排序 1.基本思想 确定一个比较范围,在每次排序中遍历这个范围内的元素,通过比较与交换使这个范围中最大或者最小的元素冒泡到最右侧,逐次缩小这个比较范围,直到整个序列变为已排序序列。原创 2013-11-05 01:12:29 · 837 阅读 · 0 评论 -
插入排序
插入排序的基本思想:每次将一个待排序的记录插入按照关键字的大小插入到前面已排序的子序列中,直到全部记录插入完成为止。比较常用的两种插入排序算法是直接插入排序与希尔排序。下面分别介绍两种排序算法的基本思想、具体实现、复杂度分析。一.直接插入排序 1.基本思想 直接插入排序假定将整个待排序序列分为两个部分:已排序子序列与待排序子序列。原创 2013-11-05 01:43:55 · 638 阅读 · 0 评论 -
单链表概念及实现
单链表这种数据结构表现为:在内存中可以不连续存储,每一个节点存储一个指向下一个节点的next指针。单链表在search时以O(N)的时间运行,而在insert时以O(1)时间运行。 在实现方面,以C为例,一般会保留一个header作为表头,以NULL为表尾,废话不多说,上代码。 接口定义如下: #ifndef _List_H #define _List_H /原创 2013-11-05 22:51:33 · 754 阅读 · 0 评论 -
双向链表的概念及实现
在实现单链表时,查找当前节点的上一个节点较为麻烦,需要遍历链表进行查找,所以可以用在每个节点中存储指向上一个节点的指针的方式解决这个问题,这就是双向链表。在实现中依然保留header作为表头,NULL作为表尾。 代码如下:#ifndef _DOUBLE_LINKED_LIST_H#define _DOUBLE_LINKED_LIST_Htypedef int Eleme原创 2013-11-06 00:44:04 · 1058 阅读 · 0 评论 -
栈的概念及实现
栈是一种先入后出(后入先出)的数据结构,栈的这种性质被用于很多场景,如代码编译、代码语法检查、函数调用等。栈的实现方式有两种:用链表实现、用数组实现。一.链表实现 看过几本数据结构的书如《Data Structures and Algorithm Analysis in C》与《C Primer Plus》,也可能是由于写惯了Java代码,总是感觉书中的代码抽象的力度不够,所以自原创 2013-11-06 03:43:28 · 691 阅读 · 0 评论 -
散列表
散列表是一种以常数平均时间执行插入,删除,查找的数据结构。 插入、删除、查找时都会对key进行hash计算,以确定需要操作的条目。 我们在构造散列表时通常要考虑两个问题:1.如何将key均匀插入 2.如何解决key冲突。一.散列函数 散列函数主要用来解决均匀分布问题,该函数在操作散列表时执行频繁,所以我们需要的散列函数有以下需求: a.执行速原创 2013-11-08 01:26:27 · 670 阅读 · 0 评论 -
树的概念及实现
一.树的概念及性质 1.树的概念定义 我们使用递归定义树,树是由一个root节点及0个或多个子树组成,每棵子树的root的节点都与整棵树的root节点通过一条有向边连接。 2.树的性质 一棵树有N个节点与N-1条边组成,对于边的计算很容易理解:除去root节点外每个节点由一条边连接root节点。 3.树的实现原创 2013-11-07 21:28:32 · 589 阅读 · 0 评论 -
队列的概念及实现
队列也是一种表,队列提供两种基本操作,即在队头(front)出队(Dequeue)与在队尾(rear)入队(Enqueue)。与栈相同,队列也有种实现方式,链表实现与数组实现。一.队列的链表实现 基本想法,在保留一个header节点作为定位front的指针,并在队列结构体中定义rear指针,同时为了在出队时方便获取上一个节点的指针,我们以时间换空间牺牲一点内存多原创 2013-11-07 06:46:56 · 526 阅读 · 0 评论