![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
程序猿编码
嘿,编译通过了!
展开
-
SkipList(跳表)原理及实现
前言SkipList(跳表)是一个随机化的数据结构,可以被看做二叉树的一个变种,它在性能上和红黑树,AVL树不相上下,但是跳表的原理非常简单,目前在Redis和LeveIDB中都有用到。只要你能熟练操作链表,就能轻松实现一个 跳表。如何理解“SkipList”?对于一个单链表来讲,即便链表中存储的数据是有序的,如果我们要想在其中查找某个数据,也只能从头到尾遍历链表。这样查找效率就会很低。上...原创 2019-12-23 21:34:04 · 690 阅读 · 0 评论 -
数据结构一一二叉搜索树
什么是树树在计算机科学里,是一种十分常见的数据结构,几乎所有操作系统都将文件存放在树状的结构里。从上面的图来看,树是由节点和边构成,整棵树有一个最上端节点,称为跟节点。每个节点可以拥有具方向性的边用来和其他节点相连。相连的节点中,在上者称为父节点,在下者称为子节点。无子节点称为叶节点。子节点可以存在多个,如果最多只允许两个子节点,即所谓二叉树。根节点的至任何节点之间有唯一的路径,路径所经过的...原创 2019-12-15 22:40:35 · 477 阅读 · 0 评论 -
数据结构一一循环链表
前言循环链表是另一种形式的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。单循环链表单循环链表——在单链表中,将终端结点的指针域NULL改为指向表头结点或开始结点即可。如下图(a)所示:注意:循环链表的操作和线性链表基本一样,差别仅在于算法中的循环条件不是p或p->next是否为空,而是它们是否等于头指针(head)。如下图(b)所示:单链表的问题...原创 2019-12-11 21:39:41 · 676 阅读 · 0 评论 -
STL一一find()函数算法的泛化过程
前言再好的编程技巧,也无法让一个笨拙的算法起死回生。选择错误的算法,变注定了失败的命令。回归于主题,如果将一个叙述完整的算法转化成程序,是经过积累才能写得出来的。那么,如何设计一个算法,使它适用于任何数据结构呢?什么叫泛化我们也许会想,如何在即将处理的未知数据结构上,正确的实现所有的操作呢?只要把操作对象的类型加以抽象化,把操作对象的标示法和区间目标的移动行为抽象化,整个算法也就在一个抽象的...原创 2019-10-31 23:06:09 · 771 阅读 · 0 评论 -
C语言一一如何实现一个栈
前言栈是一种数据结构,例如函数的调用就需要使用栈。栈的特点是先进后出,可以想象成子弹夹子。当上子弹时候,最晚放上去的,可以最先拿出来。由于栈只有一边开口存取数据,称开口的那一端为“栈顶”,封死的那一端为“栈底”。栈的结构图如下:栈的先进后出原则数据按一定的顺序存储到栈中,当需要调取栈中某数据元素时,需要将在该数据元素之后进栈的先出栈,该数据元素才能从栈中提取出来。例如栈的结构图中:存放...原创 2019-10-24 22:14:57 · 5750 阅读 · 3 评论 -
静态数组实现队列
前言与线性表(链表)、栈类似,队列也有顺序存储和链式存储两种存储方法。以顺序储存为例。今天主要讲静态数组实现队列的过程。日常生活中,去超市购物,结账,去售票处买票,都是典型的队列。概念队列是一种先进先出的数据结构。队列简称队,只允许在表的尾端进行插入,而在表的首端进行删除。向队列中插入元素称为入队;删除元素称为出队。它需要两个指针,一个指向队头(front),一个指向队尾(rear),这...原创 2019-10-22 22:43:00 · 713 阅读 · 0 评论 -
C语言一一字符串排序、冒泡排序、选择排序、二分查找
前言如果你没有扎实的数据结构的功底,不知道链表与队列、哈希表与二叉查找树使用等。不妨可以考虑从排序算法入手。字符串排序我们来处理一个按字母表顺序排序字符串的实际问题。比如说名单表、创建索引和许多其他情况下都会用到字符串排序。用strcmp()函数确定两个字符串的顺序。一般的做法是读取字符串函数、排序字符串并打印出来。现在来实现读入字符串,并排序字符串:#include <stdio....原创 2019-10-21 20:13:35 · 3400 阅读 · 0 评论 -
C语言数据结构一一浅谈数组和链表的区别及实现
前言我们来处理一个数据表示的示例。假设要编写一个程序,让用户输入看过的电影。为了简单起见,储存电影的信息有片名、评分(0~10)。接下来用结构数组来编写如下程序实现:film.c#include <stdio.h>#include <string.h> //strchr()#define TSIZE 50 //电影名长度#define FMAX 5 //电...原创 2019-10-18 23:33:46 · 1851 阅读 · 0 评论