Data Structures:
线性(Linear)
(即常说的线性表)
顺序表/数组(Array)
链表(Linked List)
单向链表/单链表(Singly Linked List)
循环链表(Circular Linked List)
双向链表(Doubly Linked List)
栈(Stack)
队列(Queue)
非线性(Non-Linear)
树(Tree)
二叉树
完全二叉树
满二叉树
堆(Heap)
霍夫曼树(Huffman Tree)
亦称最优二叉树
二叉查找树(Binary Search Tree)
亦称二叉排序树(Binary Sort Tree)
自平衡二叉查找树(Self-balancing Binary Search Tree)(如红黑树(Red-black Tree)、AVL树)
平衡二叉树(Balanced Binary Tree)
图(Graph)
集合(Set)
Table
散列表(Hash Table)
可视化的数据结构和算法:
http://www.cs.usfca.edu/~galles/visualization/Algorithms.html
Algorithms, 4th Edition:
http://algs4.cs.princeton.edu/home/
重要点说明:
树:引用
节点的度:结点所含子树的个数。 树的度是树内各节点的度的最大值
完全二叉树:
引用
若一棵二叉树至多只有最下面的两层上的结点的度数可以小于2,并且最下层上的结点都集中在该层最左边的若干位置上,则此二叉树称为完全二叉树。
满二叉树:
引用
最后一层全为叶子节点,其他层上的所有结点都有两个子结点(度数都为2)的二叉树称为满二叉树。
霍夫曼树:
引用
树节点的权(值):若为树中结点赋予一个有某种含义的数值,则这个数值称为该结点的权
结点的带权路径长度:从根结点到该结点之间的路径长度与该结点的权的乘积。
树的带权路径长度:所有叶子结点的带权路径长度之和,记为WPL。
WPL最小的二叉树称为霍夫曼树。
二叉查找树:
引用
或者是一棵空树,或者是具有下列性质的二叉树:① 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;② 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;③ 它的左、右子树也分别为二叉查找树。
按中序遍历二叉查找树得到的中序序列是一个递增有序序列。
平衡二叉树:
引用
或者是一棵空树,或者是具有下列性质的二叉树:① 左右两个子树的深度之差的绝对值<=1 ② 它的左、右子树也分别为平衡二叉树。
一般情况下在二叉查找树中查询指定结点时的查询复杂度是跟目标结点到树根的距离(即深度,或树的高度)有关,因此当结点的深度普遍较大时,查询的均摊复杂度会上升,为了更高效的查询,平衡树应运而生了。这里的“平衡”指所有叶子的深度趋于平衡,更广义的是指在树上所有可能查找的均摊复杂度偏低。
堆:
引用
对任一节点其值总是大于或等于(小于或等于)任何一个子节点的值的完全二叉树称为最大堆(最小堆)。
红黑树:
引用
是一种自平衡二叉查找树。红黑树确保从根节点到所有叶子节点的路径中,最长路径不大于最短路径的两倍,因而是接近平衡的。
散列表/哈希表(Hash Table):
http://student.zjzk.cn/course_ware/data_structure/web/chazhao/chazhao9.4.3.2.htm 看动画演示!
定义:根据设定的哈希函数H(key)和处理冲突的方法将一组关键字映像到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“像”作为记录在表中的存储位置,这种表称为散列表/哈希表或散列桶(hash buckets),这一映像过程称为哈希造表或散列,所得存储位置称为哈希地址或散列地址。
哈希函数的构造:方法有直接定址法、数字分析法、平方取中法、折叠法、除留余数法、随机数法等。好的哈希函数应该满足:简单和均匀。
引用
除留余数法:
取关键字被某个不大于哈希表表长m的数p除后所得余数为哈希地址:
H(key)=key MOD p (p<=m)
冲突及解决:对不同的关键字可能得到同一哈希地址(函数值),即关键字K1≠K2,但H(K1)= H(K2),这种现象称为冲突。具有相同函数值的关键字对该哈希函数来说称做同义词。解决冲突的方法有Open addressing(开放定址法)、Separate chaining(中文俗称链地址法、拉链法)、再哈希法、Bucket Hashing(中文俗称桶哈希法或建立公共溢出区)等。
引用
Open addressing:
插入时当关键字经由哈希函数的散列映射过程出现与不同关键字的冲突时,使用某种探查(亦称探测)技术在散列表中形成一个探查(测)序列,沿此序列逐个单元地查找,直到碰到与当前关键字等值的关键字(此时的处理可以是放弃插入,也可以是替换原等值关键字),或者碰到一个开放的哈希地址(即该哈希地址为空),则将当前关键字存入该哈希地址。通用表达式为:
Hi=( H(key) + di) MOD m 0<i≤m-1
H(hey):哈希函数 ; m:哈希表表长 ; di:增量序列
按照形成探查序列的方法不同(即di的不同),又可将开放定址法细分为线性探查法(Linear probing)、二次探查法(Quadratic probing)、双散列探查法(Double hashing)、随机探查法等。
Linear probing:di = 1,2,3,..,m-1
Quadratic probing:di = 1^2,-1^2,2^2,-2^2,....,k^2,-k^2 (k<=m/2)
Separate chaining:
将所有关键字为同义词的记录存储在同一单链表中;哈希表长为m,设置一个由m个指针分量组成的一维数组 ST[m], 凡哈希地址为 i 的关键字都插入到头指针为 ST[i] 的单链表中。一般保证单链表是按关键字有序的,这样可以减少比较的次数,提高性能。
哈希表的查找:
在哈希表上进行查找的过程和哈希造表的过程基本一致。给定的关键字,根据造表时设定的哈希函数求得哈希地址,若表中此位置上没有记录,则查找不成功;否则比较关键字,若和给定关键字相等,则查找成功;否则根据造表时设定的处理冲突的方法找“下一地址”,直至哈希表中的某个位置为“空”或者表中所填记录的关键字等于给定关键字时为止。
引用
查找时,决定平均查找长度的一个很重要的因素是填充因子(Load factor):
填充因子 a = 表中填入的记录数/哈希表的长度
通过数学推导可以计算出,哈希表的平均查找长度是填充因子的函数,而与哈希表中的记录数 n 无任何关系。由此,不管 n 多大,我们总可以选择一个合适的填充因子以便将平均查找长度限定在一个范围内。
分享到:
相关推荐
数据结构原本,大一统,外文书原版 Data structures Contents Articles Introduction 1 Data structure 1 Linked data structure 3 Succinct data structure 6 Implicit data structure 8 Compressed data structure...
《C++ plus data structures》是一本专注于C++编程语言与数据结构结合的教材,适合对C++编程和数据结构有浓厚兴趣的读者。数据结构是计算机科学中的核心概念,它研究如何有效地组织和存储数据,以便进行高效的操作。...
国外数据结构经典教材 Advanced Data Structures presents a comprehensive look at the ideas, analysis, and implementation details of data structures as a specialized topic in applied algorithms. This ...
这个压缩包“Data Structures(数据结构).rar”包含了与数据结构和算法相关的资料,主要由一系列PPT讲座和一本经典的编程书籍组成。 首先,我们来看其中的书籍“Prentice.Hall.W.Kernighan&Dennis.M.Ritchie.The.C...
Dictionary of Algorithms and Data Structures 算法全书 数据结构词典
Data Structures, Algorithms and Applications in C++ Second Edition Sartraj Sahni | Universities Press 2005 | ISBN: 817371522X | PDF | 826 Pages | 27 MB Description The study of data structures and ...
这本书名为《算法+数据结构=程序》(Algorithms + Data Structures = Programs),由瑞士科学家尼古拉斯·维尔特(Niklaus Wirth)所著。尼古拉斯·维尔特教授于苏黎世联邦理工学院(ETH Zurich)工作,是Pascal编程...
"Fundamentals of Python: Data Structures"这本书深入浅出地介绍了Python中的各种数据结构,包括列表、元组、字典、集合以及更高级的概念如堆栈、队列、链表等。配套代码可以帮助读者更好地理解和实践这些概念。 1...
数据结构与程序设计(英文版)Data Structures and Program Design in C++ Robert L. Kruse 数据结构与程序设计C++语言描述 作 者:(美)克鲁斯
- **Data Structures and Algorithms** (数据结构与算法)章节首先介绍了为什么需要数据结构,接着探讨了抽象数据类型和数据结构的概念,最后介绍了一些设计模式,如Flyweight(享元模式)、Visitor(访问者模式)、...
在“Fundamentals of Data Structures”这个主题中,我们将会深入探讨数据结构的基本概念、实现方法以及它们在编程语言中的应用。 一、数据结构的概念 数据结构是指一组数据的存储结构,它不仅包括数据的物理存储...
"数据结构基础 (C语言版) FUNDAMENTALS OF DATA STRUCTURES IN C 部分习题英文版答案" 本资源是关于数据结构基础的习题答案,使用C语言编写,主要内容包括线性表、栈、队列、树、图等数据结构的基础知识和习题答案...
Python Data Structures and Algorithms by Benjamin Baka English | 30 May 2017 | ASIN: B01IF7NLM8 | 310 Pages | AZW3 | 6.63 MB Key Features A step by step guide, which will provide you with a thorough...
《C++算法与数据结构 Algorithms and Data Structures in C++》是一部深入探讨C++编程中算法和数据结构的著作。在编程领域,算法和数据结构是基础且至关重要的部分,它们决定了程序的效率和解决问题的能力。C++作为...
### 数据结构与C语言 #### 一、书籍概述 《数据结构使用C语言》是一本由Reema Thareja撰写的计算机科学领域的经典教材。该书由牛津大学出版社出版,作者是Shyama Prasad Mukherjee女子学院计算机科学系的助理教授...
### 并发数据结构概述 #### 一、并发数据结构的重要性与挑战 随着商业共享内存多处理器系统的广泛应用,以及低成本芯片多线程(CMT)技术的发展趋势,设计高效的并发数据结构变得至关重要。这些系统能够并行执行多...
rust 数据结构与算法,英文版,epub格式 Chapter 1, Hello Rust!, gives a short recap of the Rust programming language and what changed in the 2018 edition. Chapter 2, Cargo and Crates, discusses Rust's ...