编程中的 6 种常见数据结构
数据结构是编程中高效软件的基石。了解何时以及为何使用每个数据结构可以提高您的问题解决能力。在这里,我们探索 6 种基本数据结构,深入研究它们的特征、用例和 TypeScript 中的实现。每个部分都包含图表和代码示例,以便清晰理解。
1. 数组
数组是一块连续的内存块,其中存储相同类型的元素。
**特征:**
**何时使用:**数组用于存储需要快速随机访问的元素的有序集合。
**代码示例**
const fruits: string[] = ['apple', 'banana', 'cherry']; console.log(fruits[1]); // Outputs: banana
**可视化**
2. 链表
链表是节点的集合,其中每个节点包含数据和对下一个节点的引用。
**特征:**
**何时使用:**对于需要频繁插入和删除的应用程序使用链接列表,例如编辑器中的撤消功能。
**代码示例**
class Node{ value: T; next: Node | null = null; constructor(value: T) { this.value = value; } } class LinkedList { head: Node | null = null; add(value: T) { const newNode = new Node(value); if (!this.head) { this.head = newNode; } else { let current = this.head; while (current.next) { current = current.next; } current.next = newNode; } } } const list = new LinkedList (); list.add(10); list.add(20); console.log(JSON.stringify(list)); // Outputs: {"head":{"value":10,"next":{"value":20,"next":null}}}
**可视化**
3. 堆叠
堆栈是一种 LIFO(后进先出)数据结构。
**特征:**
**何时使用:**使用堆栈来管理函数调用、语法解析或撤消操作。
**代码示例**
class Stack{ private items: T[] = []; push(item: T): void { this.items.push(item); } pop(): T | undefined { return this.items.pop(); } display(): void { console.log(this.items.reverse()); } } const stack = new Stack (); stack.push(1); stack.push(2); stack.push(3); console.log(stack.pop()); // Returns 3
**可视化**
4. 队列
队列是一种 FIFO(先进先出)数据结构。
**特征:**
**何时使用:**使用队列来管理任务,例如作业调度或广度优先搜索。
**代码示例**
class Queue{ private items: T[] = []; enqueue(item: T): void { this.items.push(item); } dequeue(): T | undefined { return this.items.shift(); } display(): void { console.log(this.items); } } const queue = new Queue (); queue.enqueue(1); queue.enqueue(2); queue.enqueue(3); queue.display(); // Outputs: [1, 2, 3] console.log(queue.dequeue()); // Returns 1
**可视化**
5.哈希表
哈希表是一种针对快速查找进行优化的键值对数据结构。
**特征:**
**何时使用:**使用哈希表作为字典、缓存和集合。
**代码示例**
class HashTable{ private buckets: [K, V][][] = []; private hash(key: K): number { return JSON.stringify(key).length % 10; } set(key: K, value: V): void { const index = this.hash(key); this.buckets[index] = this.buckets[index] || []; this.buckets[index].push([key, value]); } get(key: K): V | undefined { const index = this.hash(key); const bucket = this.buckets[index] || []; for (const [k, v] of bucket) { if (k === key) return v; } } } const hashTable = new HashTable (); hashTable.set("name", "Alice"); hashTable.set("age", 30); console.log(hashTable.get("age")); // Outputs: 30
**可视化**
6.二叉树
二叉树是一种层次结构,其中每个节点最多有两个子节点。
**特征:**
**何时使用:**使用二叉树来存储文件系统等分层数据。
**代码示例**
class TreeNode{ value: T; left: TreeNode | null = null; right: TreeNode | null = null; constructor(value: T) { this.value = value; } } const root = new TreeNode(1); root.left = new TreeNode(2); root.right = new TreeNode(3); console.log(JSON.stringify(root)); // Outputs: {"value":1,"left":{"value":2,"left":null,"right":null},"right":{"value":3,"left":null,"right":null}}
**可视化**
结论
理解数据结构对于编写高效且可扩展的代码至关重要。数组、链表、堆栈、队列、哈希表和二叉树各有其特定用途,从管理顺序到分层组织数据。
掌握这些基础知识可以让你解决各种挑战,无论是在编程面试还是实际项目中。经常练习,你很快就会看到它对你解决问题能力的影响。
进一步学习参考资料
**图书:**
**互动平台:**
**课程:**
在 X 上关注我以了解更多!