1、常见的数据结构:
-
数组(Array):一组连续存储的数据元素,可以通过索引访问。数组的插入、删除操作较为低效,但查找操作具有较高的性能。
-
链表(Linked List):由一系列节点组成的数据结构,每个节点包含一个数据元素和一个指向下一个节点的指针。链表支持快速的插入和删除操作,但查找操作需要遍历链表。
-
栈(Stack):一种后进先出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。常用于表达式求值、括号匹配等场景。
-
队列(Queue):一种先进先出(FIFO)的数据结构,允许在队尾插入元素,在队头删除元素。常用于任务调度、广度优先搜索等场景。
-
树(Tree):一种分层的数据结构,由节点和边组成,每个节点最多有一个父节点和多个子节点。常见的树包括二叉树、二叉搜索树、平衡二叉树等。
-
图(Graph):由顶点和边组成的数据结构,顶点之间通过边相连。图可以是有向图或无向图,可以是带权图或不带权图。
-
堆(Heap):一种特殊的树形数据结构,通常用来实现优先队列。堆分为最大堆和最小堆,具有高效的插入和删除操作。
-
哈希表(Hash Table):通过哈希函数将键映射到存储位置的数据结构。哈希表支持常数时间复杂度的插入、删除和查找操作,适用于大数据量的快速检索。
-
集合(Set):一种不包含重复元素的数据结构,常用于去重和集合运算。
-
字典(Dictionary):一种由键值对组成的数据结构,可以根据键快速查找值。
2、数据结构在js中的实现
- 数组(Array):
let array = [1, 2, 3, 4, 5];
- 栈(Stack):
class Stack { constructor() { this.items = []; } push(element) { this.items.push(element); } pop() { if (this.items.length === 0) return null; return this.items.pop(); } peek() { return this.items[this.items.length - 1]; } isEmpty() { return this.items.length === 0; } size() { return this.items.length; } }
- 队列(Queue):
class Queue { constructor() { this.items = []; } enqueue(element) { this.items.push(element); } dequeue() { if (this.items.length === 0) return null; return this.items.shift(); } front() { return this.items[0]; } isEmpty() { return this.items.length === 0; } size() { return this.items.length; } }
- 链表(Linked List):
class ListNode { constructor(val) { this.val = val; this.next = null; } } class LinkedList { constructor() { this.head = null; } append(val) { let newNode = new ListNode(val); if (!this.head) { this.head = newNode; } else { let current = this.head; while (current.next) { current = current.next; } current.next = newNode; } } }
- 集合(Set):
let set = new Set(); set.add(1); set.add(2); set.add(3);