js学习之数据结构和算法

js中的数据结构

1、列表
  待办事项列表、购物清单、最佳十名榜单等等。

  适用:
    1)数据结构较为简单,
    2)不需要在一个长序列中查找元素,或者对其进行排序

2、栈

  一摞盘子 ----- 添加删除只能从最上面。
  特点:栈被称为一种后入先出的数据结构。是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快。
  适用:只要数据的保存满足后入先出或先进后出的原理,都优先考虑使用栈

3、队列

  银行排队----
  特点:队列只能在队尾插入元素,在队首删除元素。
  适用:只要数据的保存满足先进先出、后入后出的原理,都优先考虑使用队列
    1)队列主要用在和时间有关的地方,特别是操作系统中,队列是实现多任务的重要机制
    2)消息机制可以通过队列来实现,进程调度也是使用队列来实现

4、链表
  JS中数组被实现了成了对象,但是与其他语言相比(比如C或Java),那么它的效率会低很多。这时候,我们可以考虑使用链表(Linked-list) 来替代它,除了对数据的随机访问,链表几乎可以在任何可以使用一维数组的情况中。

5、字典
  字典是一种以键-值对行驶存储数据的数据结构,javaScript中的Object类就是以字典的形式设计的。

6、散列
  散列(也称为哈希表)是一种的常用的数组存储技术,散列后的数组可以快速地插入或取用。散列使用的数据结构叫做散列表。
  特点:在散列表上插入、删除和取用数据都非常快,但对于查找操作来说却效率低下。

7、图
  图由边的集合及顶点的集合组成。地图是我们身边很常见的现实场景,比如每两个城镇都由某种道路相连。
  适用:
    1)交通系统,可以用顶点表示街道的十字路口,边可以表示街道。加权的边可以表示限速或者车道的数量。可以用该系统判断最佳路线及最有可能堵车的街道。
    2)任何运输系统都可以用图来建模。比如,航空公司可以用图来为其飞行系统建模。将每个机场看成顶点,将经过两个顶点的每条航线看作一条边。加权的边可以表示从一个机场到另一个机场的航班成本,或两个机场间的距离,这取决于建模的对象是什么。

8、二叉树和二叉查找树
  树是计算机科学中经常用到的一种数据结构。树是一种非线性的数据结构,以分层的方式存储数据。
  二叉树每个节点的子节点不允许超过两个。一个父节点的两个子节点分别称为左节点和右节点,通过将子节点的个数限定为2,可以写出高效的程序在树中插入、查找和删除数据。
  二叉查找树(BST)是一种特殊的二叉树,相对较小的值保存在左节点中,较大的值保存在右节点中。这一特性使得查找的效率很高,对于数值型和非数值型的数据,比如单词和字符串,都是如此。

算法

1、冒泡排序
  1)比较相邻的两个元素,如果前一个比后一个大,则交换位置。
  2)比较完第一轮的时候,最后一个元素是最大的元素。
  3)这时候最后一个元素是最大的,所以最后一个元素就不需要参与比较大小。

function bSort(arr) {
    var len = arr.length;
    for (var i = 0; i < len-1; i++) {
        for (var j = 0; j < len - 1 - i; j++) {
            // 相邻元素两两对比,元素交换,大的元素交换到后面
            if (arr[j] > arr[j + 1]) {
                var temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
    return arr;
}

//举个数组
myArr = [20,18,27,19,35];
//使用函数
bSort(myArr)

 2、统计字符串里出现出现频率最多的字符

<script>
var str = 'abcdefffdddddd';
var obj={};
for(var i=0;i<str.length;i++){
    var t = str[i];
    if(obj[t]){
        obj[t]++;
    }else{
        obj[t] = 1;
    }
}
console.log(obj);

var max=0,tKey;
for(key in obj){
    if(obj[key] > max){
        max = obj[key];
        tKey = key;
    }
}
console.log(tKey)
</script>
原文地址:https://www.cnblogs.com/zjz666/p/11537767.html