随笔分类 - 数据结构
摘要:1.基础查找 符号表是一种典型的ADT,它提供了操作键值对的方法: put(插入、insert)、search、delete操作,这一节将会给出两种初级的符号表: 无序链表中的顺序查找、基于有序数组二分查找的有序符号表。 在某些实现中我们认为保持键的有序性并大大扩展它的API是很有用。例如键是时间,
阅读全文
摘要:0.先言 排序算法是数据结构与算法中最基本的算法之一。 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序
阅读全文
摘要:1. 二叉树 一般地二叉树多用链式存储结构来描述元素的逻辑关系。通常情况下二叉树中的结点定义如下: typedef struct btree_node { void *item; struct btree_node *left; struct btree_node *right; } btree_n
阅读全文
摘要:1. 队列 队列是一种FIFO的数据结构,它有两个出口,限定只能在表的一端进行插入(队尾插入)和在另一端进行删除(队头删除)操作,同样的它也没有遍历行为。 由于在队列的顺序存储中无法判断队列满的条件,一般地如果用数组实现队列,循环队列是必须的。一般设置一个队头指针front和队尾指针rear,初始化
阅读全文
摘要:1. 动态数组 它的基本思路是使用如malloc/free等内存分配函数得到一个指向一大块内存的指针,以数组的方式引用这块内存或者直接调用动态数组的接口,根据其内部的实现机制自行扩充空间,动态增长并能快速地清空数组,对数据进行排序和遍历。 它的数据结构定义如下: typedef struct { v
阅读全文
摘要:为了理解hash所谓的空间地址,先由数组和链表的存储性能入手,更容易理解。 我们通过初级的数据结构进行数据存储,也是为了对数据进行基本的增删改查操作。那么数组和链表在进行这些操作的性能对比如下。 数组与链表的区别 (1)存储空间上链表存放的内存空间可以是连续的,也可以是不连续的,数组则是连续的一段内
阅读全文
摘要:一、主要区别 //array首先向右结合,所以这个相当于 (int&)array[] array是个数组,其中的元素是引用 //应该叫:引用的数组 int &array[] //array首先和&结合,所以array是引用,引用的对象是数组 //应该叫作数组的引用 int (&array)[10]
阅读全文
摘要:一、知识点结构图 二、定义 红黑树是一种特定类型的二叉树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由RudolfBayer发明的,他称之为"对称二叉B树",它现代的名字是在LeoJ.Guibas和RobertSedgewick于1978年写的一篇论文中获得的。它
阅读全文
摘要:整理了常见的排序算法:插入排序、选择排序、归并排序、交换排序。 一、插入排序 1.1 直接插入排序 直接插入排序的特点: 时空效率: 时间复杂度为O(n^2),空间复杂度为O(1)。最好情况下是元素基本有序,此时每插入一个元素,只需比较几次而无需移动,时间复杂度为O(n) 稳定性: 保证相等元素的插
阅读全文
摘要:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 参考:https://www
阅读全文
摘要:字符串匹配一直是一个热门的算法。本文主要讲两种,普通方法(回溯)+高级方法(KMP)。 一、回溯法求子串位置(普通方法) 算法思想: 给定两个指针:i、j,分别指向主串的第pos个位置和子串的第一个位置。比较两个指针所指的字符:如果相等,则继续比较后续字符;若不等,则 i 指针跑到pos的下一个位置
阅读全文

浙公网安备 33010602011771号