数据结构与算法JavaScript描述

156 阅读3分钟

数据结构与算法JavaScript描述

Michael McMillan著

人民邮电出版社

数组

定义:

一个存储元素的线性集合,元素可以通过索引来任意存取,索引通常是数字,用来计算元素之间存储位置的偏移量。 JavaScript原生的数据类型,(列表/栈/队列都可以基于数组实现)

工作原理:

使用场合:

创建数组:

let a=[];

let b=new Array(10);

方法:

  • indexOf():查找
  • lastIndexOf():
  • join()
  • toString()
  • concat()
  • splice(start,length,[insert])
  • push()/pop()
  • unshift()/shift()
  • reverse()
  • sort(comparefunction)
  • every()
  • some()
  • reduce()
  • map()
  • filter()

列表

定义:

一组有序的数据;是一种抽象的数据类型;

image-20230408145718348.png

工作原理:

使用场合:

对于查找的要求不高

创建:

基于数组,自定义类来实现

方法

定义

数据只能在栈顶操作,后入先出的一种抽象数据结构;

栈的抽象数据类型(ADT)定义

名称说明
dataStore:数组保存栈内元素
top:私有属性记录栈顶位置
length:function长度
push:function入栈
pop:function出栈
peek:function预览栈顶
clear:function清空

工作原理:

使用场合:

  • 将数组n转换成为b(b是2~9的数字)为技术的数字;

    function mulBase(num,base){
     var s=new Stack();
     do{
      s.push(num%base);
      num=Math.floor(num/=base);
     } while(num>0);
     
     var converted='';
     while(s.length()>0){
      converted+=s.pop()
     }
     
     return converted
     
    }
    
  • 回文判断
  • 递归

创建:

基于数组,自定义类实现

方法:

  • push():入栈
  • pop():出栈
  • peek():预览栈顶

队列

定义

队尾插入,队首删除的先进先出的列表

队列的抽象数据类型(ADT)定义

名称说明
dataStore:数组保存队列内元
length:function长度
enqueue:function入队
dequeue:function出队
front:function预览队首
back:function预览队尾
toString:function显示队列内的所有元素
empty:function判空

工作原理:

使用场合:

  • 模拟现实排队
  • 数据排序
  • 优先队列:优先级高的先走,相同优先级按照先进先出的顺序走;
  • 双向队列:队尾和队首可以双向添加和删除

创建:

基于数组,自定义类实现

方法:

  • enqueue()
  • dequeue()
  • empty()
  • toString()

链表

定义

链表是由一组节点(Node) 组成的集合;每个节点都使用**链(链:一个对象的引用)指向它的后继;

节点的抽象数据类型定义

名称说明
element:对象元素
next

链表的抽象数据类型定义

名称说明
head:Node头节点
find:function查找
insert:function插入
remove:function移除
display:function展示链表的所有节点

工作原理:

使用场合:

JS的数组效率很低,如果发现数组在实际中使用很慢,就可以考虑用链表替代;除了数据的随机访问,链表几乎可以用在任何可以使用一维数组的情况中。如果需要随机访问,数组最优;

  • 适合插入和删除多个元素时,更高效
  • 不适合查找和随机访问
  • 双向链表的Node类需要多加一个previous,双向链表比单向的支持更快的从后往前找
  • 循环链表:链表的尾结点指向头结点

创建:

方法:

字典

定义

工作原理:

使用场合:

创建:

方法:

散列

定义

工作原理:

使用场合:

创建:

方法:

集合

定义

工作原理:

使用场合:

  • 不允许有重复元素出现的场景

创建:

方法:

二叉树和二叉查找树

定义

工作原理:

使用场合:

  • 适合存储有序的元素

创建:

方法:

图和图算法

定义

工作原理:

使用场合:

创建:

方法:

排序算法

处理大数据

检索算法

线性查找

二分查找

高级算法

动态规划

贪心算法