在软件开发中,常用的数据结构具有各自的场景和应用。以下是一些常见的数据结构、它们的应用场景以及相应的代码示例:
-
数组(Array):
- 场景:用于存储一组相同类型的元素,通过索引访问元素。
- 例子:
let numbers = [1, 2, 3, 4, 5]; console.log(numbers[2]); // 输出 3
-
链表(Linked List):
- 由节点组成,每个节点包含数据和指向下一个节点的引用
- 场景:适用于频繁的插入和删除操作。
- 例子:
class Node {constructor(data) {this.data = data;this.next = null;} }let list = new Node(1); list.next = new Node(2);
-
栈(Stack):
- 后进先出(LIFO)的数据结构
- 场景:处理函数调用、表达式求值、撤销操作,浏览器的前进后退历史记录
- 例子:
let stack = []; stack.push(1); stack.push(2); let poppedItem = stack.pop(); // 输出 2
-
队列(Queue):
- 先进先出(FIFO)的数据结构。
- 场景:处理任务调度、广度优先搜索等。打印队列,任务调度
- 例子:
let queue = []; queue.push(1); queue.push(2); let dequeuedItem = queue.shift(); // 输出 1
-
树(Tree):
- 用于表示层次关系的数据结构
- 场景:用于表示层次关系,例如 DOM 树、文件系统树、二叉树。
- 例子:
class TreeNode {constructor(value) {this.value = value;this.children = [];} }let root = new TreeNode(1); root.children.push(new TreeNode(2));
-
图(Graph):
- 由节点和边组成的数据结构
- 场景:表示网络结构、社交网络等。社交网络中的好友关系。
- 例子:
class Graph {constructor() {this.nodes = [];this.edges = [];} }let socialNetwork = new Graph(); // 添加节点和边...
-
哈希表(Hash Table):
- 通过散列函数将关键字映射到数组的索引。
- 场景:用于快速查找、存储键值对。
- JavaScript 中的对象,键值对 { “name”: “John”, “age”: 25 }。
- 例子:
let hashMap = {}; hashMap["name"] = "John"; console.log(hashMap["name"]); // 输出 "John"
-
堆(Heap):
- 用于快速找到最大或最小元素的数据结构。
- 场景:用于优先队列、堆排序等。
- 例子:
let minHeap = [3, 5, 8, 2, 1]; // 实际应用中可能使用专门的堆数据结构
-
集合(Set)和映射(Map):
- 集合是不重复元素的集合。
- 映射是键值对的集合。
- 场景:集合用于存储唯一元素,映射用于存储键值对。
- 例子:
let uniqueNumbers = new Set([1, 2, 3, 1]); let keyValueMap = new Map(); keyValueMap.set("name", "Alice");
-
链表哈希表(LinkedHashMap):
- 哈希表和链表的结合,用于保持元素的插入顺序。
- 场景:保持元素的插入顺序。Java 中的 LinkedHashMap。
- 例子:在某些编程语言中,有专门的实现。
-
Trie(字典树):
- 用于高效存储和搜索字符串集合。
- 场景:用于高效存储和搜索字符串集合。自动完成功能,单词搜索树。
- 例子:
class TrieNode {constructor() {this.children = {};this.isEndOfWord = false;} }let trie = new TrieNode(); // 添加单词、搜索单词...