Skip to content

Latest commit

 

History

History

data-structure

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

数据结构概述

数据结构就是数据组织存储方式,也就是把数据聚合在一起,以便进行加工整理。把数据从一种结构换成另一种结构就是数据处理,这是编程最常见的工作。

  • 数据类型一般分为整型、字节、浮点、字符、和布尔等类,也就是生活中的数字和文字,把它按照一定规则分下类,不同语言略有些不同。
  • 数据结构有两种分类方法:
    • 线性结构(数据按顺序一一相连,前后有固定的关系),数组、链表、栈、队列等。非线性结构(数据非一一相连,据没有固定的顺序),如树和图。
    • 集合结构(数据无关系)、线性结构(数据一对一)、树形结构(数据一对多)、图形结构(数据多对多)。

基础结构有以下8种:

参见:如何学好编程?一文彻底搞懂

  • 数组(Array),聚合数据的集合,可以实现线性和非线性。
  • 链表(Linked List),线性结构,数据以链式结构存储。
  • 树(Tree),非线性结构,模拟树状结构性质的数据集合,一个顶点。
  • 堆(Heap),非线性结构,特殊的树形数据结构,一般指完全二叉树。
  • 栈(Stack),线性结构,后进先出。
  • 队列(Queue),线性结构,先进先出。
  • 图(Graph),非线性结构,节点相互连接,每个节点都可以作为顶点。
  • 散列(Hash),线性结构,根据键访问储存位置的数据结构。

8种基础数据结构

数组(Array)

相同类型数据元素的有序集合。每个元素都有唯一的索引,可以通过索引快速访问。

应用:数组适用于需要快速访问元素的场景,如一组数字、字符等。然而,数组在添加或删除元素时效率较低。

链表(Linked List)

由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表在内存中不是连续存储,可以动态添加或删除元素。

应用:链表适用于需要频繁插入和删除的场景,但随机访问效率较低。

树(Tree)

一种层次化的数据结构,由一个根节点和若干个子节点组成。每个子节点可能有自己的子节点,形成树状结构。

应用:常见的树结构包括二叉树、红黑树等。可以用于组织数据,例如文件系统、数据库索引等。

堆(Heap)

一种特殊的树状数据结构,满足堆属性。根据堆的类型,最小堆(Min-Heap)和最大堆(Max-Heap)是常见的形式。

应用:堆被广泛用于实现优先队列、堆排序以及在算法优化中使用。

栈(Stack)

遵循后进先出(LIFO)原则的数据结构。元素只能在栈顶插入或删除。

应用:栈适用于需要倒序处理数据的场景,如递归、表达式解析等。

队列(Queue)

遵循先进先出(FIFO)原则的数据结构。元素从队尾添加,并从队头删除。

应用:适用于排队、任务调度等场景。

图(Graph)

由节点(顶点)和边组成,表示对象之间的关系。节点可以代表实体,边可以代表实体之间的关联。

应用:图用于表示复杂的关系,例如社交网络、网络拓扑等。

散列(Hashing)

散列是一种技术,用于将数据映射到哈希值,以便快速查找、插入和删除。

应用:散列在许多数据结构和应用中非常重要,例如哈希表、哈希地图、数据缓存等。

其他常见数据结构

二叉树(Binary Tree)

一种树形数据结构,每个节点最多有两个子节点,包括普通二叉树、满二叉树、完全二叉树和平衡二叉树等。

应用:广泛应用于算法、数据结构、搜索和排序等领域。二叉搜索树适用于快速查找、添加和删除操作。

集合(Set)

一种不允许重复元素的数据结构。主要用于集合操作,如添加、删除、查询等。

应用:集合适用于没有重复数据的场景,提供集合运算,如并集、交集和差集等。

映射(Map)

存储键-值对,并允许通过键快速查找对应的值。键必须唯一,但值可以重复。

应用:映射用于高效的数据检索、数据关联以及数据结构之间的关联。如缓存实现、数据库索引、负载均衡等。

哈希表(Hash Table)

一种高效的数据结构,使用哈希函数将键映射到对应的值。提供快速的查找、插入和删除操作。

应用:哈希表用于快速查找、插入和删除数据的场景,例如字典、映射、缓存等。

HashMap与HashTable

  • HashMap:一种哈希表实现,不是线程安全的,适用于单线程或自行管理同步的场景。
  • HashTable:一种线程安全的哈希表,适用于多线程环境,但由于同步机制,性能可能较低。

优先队列(Priority Queue)

优先队列是一种特殊的队列,元素的顺序根据优先级排列,而非插入顺序。

应用:优先队列常用于实现任务调度、事件驱动、路径搜索等场景。

结构体(struct)

一种数据结构,用于组合一组相关的数据,以便将它们作为一个整体来处理。结构体在许多编程语言中都有支持,struct与class有点类似,struct见于C、C++、Go、Rust等语言。class用于Java和C#、JS、Python、PHP等。

应用: 用于创建具有特定属性的复杂数据类型,封装相关数据,还可用于数据包或消息的结构以及定义内存中的数据存储结构。