一、数组
1、定义:数组是一种数据结构,用于存储有序的元素集合。
2、操作:
//创建一个空数组
let arr = [];
//添加元素
arr.push(1);
arr.push(2);
//获取元素
console.log(arr[0]); //1
//获取数组长度
console.log(arr.length); //2
//删除元素
arr.splice(0, 1); //从下标0开始删除1个元素
//遍历数组
for(let i = 0; i < arr.length; i++){
console.log(arr[i]);
}
3、应用:
使用数组存储多个元素,实现数据的批量操作,如购物车中存储多个商品,网页中存储多个评论等。
二、栈
1、定义:栈是一种特殊的数据结构,只能在数组的末尾添加或删除元素。
2、操作:
//创建一个栈
let stack = [];
//添加元素
stack.push(1);
stack.push(2);
//删除元素
stack.pop();
//获取栈顶元素
console.log(stack[stack.length - 1]);
//判断栈是否为空
console.log(stack.length === 0);
3、应用:
在计算机程序中,栈常用于配合递归实现函数调用、括号匹配等操作。
三、队列
1、定义:队列是一种特殊的数据结构,只能在数组的末尾添加元素,在数组的开头删除元素。
2、操作:
//创建一个队列
let queue = [];
//添加元素
queue.push(1);
queue.push(2);
//删除元素
queue.shift();
//获取队列头部元素
console.log(queue[0]);
//判断队列是否为空
console.log(queue.length === 0);
3、应用:
队列常用于实现广度优先搜索算法,并且在计算机中还有很多其他的应用场景,如操作系统中的任务队列、打印机中的打印队列等。
四、链表
1、定义:链表是一种数据结构,由节点组成,每个节点保存数据和指向下一个节点的指针。
2、操作:
//定义一个节点
class Node {
constructor(val, next = null) {
this.val = val;
this.next = next;
}
}
//创建一个链表
let head = new Node(1);
head.next = new Node(2);
head.next.next = new Node(3);
//遍历链表
let cur = head;
while(cur){
console.log(cur.val);
cur = cur.next;
}
//在链表中插入节点
let newNode = new Node(4);
newNode.next = head.next;
head.next = newNode;
//在链表中删除节点
head.next = head.next.next;
3、应用:
链表常用于实现LRU缓存、哈希表中的拉链法等。
五、树
1、定义:树是一种数据结构,由节点和边组成,每个节点保存数据,并指向零或多个子节点。
2、操作:
//定义一个节点
class Node {
constructor(val, children = []) {
this.val = val;
this.children = children;
}
}
//创建一个树
let root = new Node(1);
root.children = [new Node(2), new Node(3)];
//遍历树-深度优先搜索
function DFS(root) {
console.log(root.val);
for(let child of root.children){
DFS(child);
}
}
DFS(root);
//遍历树-广度优先搜索
function BFS(root) {
let queue = [root];
while(queue.length){
let node = queue.shift();
console.log(node.val);
for(let child of node.children){
queue.push(child);
}
}
}
BFS(root);
3、应用:
树的应用广泛,如在页面中渲染组件、文件系统中的目录结构、计算机网络中的路由表等。
六、图
1、定义:图是一种数据结构,由点和边组成,每个点可以与其他点直接相连。
2、操作:
//定义一个点
class Node {
constructor(val, neighbors = []) {
this.val = val;
this.neighbors = neighbors;
}
}
//创建一个图
let node1 = new Node(1);
let node2 = new Node(2);
let node3 = new Node(3);
let node4 = new Node(4);
node1.neighbors = [node2, node4];
node2.neighbors = [node1, node3];
node3.neighbors = [node2, node4];
node4.neighbors = [node1, node3];
//遍历图-深度优先搜索
let visited = new Set();
function DFS(node) {
visited.add(node);
console.log(node.val);
for(let neighbor of node.neighbors){
if(!visited.has(neighbor)){
DFS(neighbor);
}
}
}
DFS(node1);
//遍历图-广度优先搜索
function BFS(node) {
let queue = [node];
visited.add(node);
while(queue.length){
let curr = queue.shift();
console.log(curr.val);
for(let neighbor of curr.neighbors){
if(!visited.has(neighbor)){
visited.add(neighbor);
queue.push(neighbor);
}
}
}
}
BFS(node1);
3、应用:
在现实生活中,图的应用非常多,如社交网络中的人际关系、地图中的路径规划、路网中的交通流等。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/289598.html