zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    sql语句 之聚合函数
    UML类图几种关系的总结
    关于Object.defineProperty的get和set
    devDependencies和dependencies的区别
    函数声明和函数表达式的区别
    移动端滑屏滚动事件的问题(横向滑动阻止垂直页面滚动)
    使用Cordova和JQM在ios上需要注意的问题
    阻止事件冒泡,阻止默认事件,event.stopPropagation()和event.preventDefault(),return fal的区别
    有关闭包的总结
    CSS命名规范——BEM思想(非常赞的规范)
  • 原文地址:https://www.cnblogs.com/zjz666/p/11537767.html
Copyright © 2011-2022 走看看