JS栈方法和队列方法,Array栈方法和队列方法的特

时间:2019-07-31 21:30来源:2020欧洲杯冠军竞猜官方网站
栈方法: 后进先出(last in first outside) 栈方法 ECMAScript数组也提供了一种让数组的行为类似于其他数据结构的方法。具体说来,数组可以表现得就像栈一样,后者是一种可以限制插入和

栈方法:后进先出(last in first outside)

栈方法

ECMAScript 数组也提供了一种让数组的行为类似于其他数据结构的方法。具体说来,数组可以表现得就像栈一样,后者是一种可以限制插入和删除项的数据结构。栈是一种LIFO(Last-In-First-Out,后进先出)的数据结构,也就是最新添加的项最早被移除。而栈中项的插入(叫做推入)和移除(叫做弹出),只发生在一个位置——栈的顶部。ECMAScript 为数组专门提供了push()和pop()方法,以便实现类似栈的行为。

push()方法可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。而pop()方法则从数组末尾移除最后一项,减少数组的length 值,然后返回移除的项。请看下面的例子:

var colors = new Array(); // 创建一个数组

var count = colors.push("red", "green"); // 推入两项

alert(count); //2

count = colors.push("black"); // 推入另一项

alert(count); //3

var item = colors.pop(); // 取得最后一项

alert(item); //"black"

alert(colors.length); //2

以上代码中的数组可以看成是栈(代码本身没有任何区别,而push()和pop()都是数组默认的方法)。首先,我们使用push()将两个字符串推入数组的末尾,并将返回的结果保存在变量count 中(值为2)。然后,再推入一个值,而结果仍然保存在count 中。因为此时数组中包含3 项,所以push()返回3。在调用pop()时,它会返回数组的最后一项,即字符串"black"。此后,数组中仅剩两项。可以将栈方法与其他数组方法连用,像下面这个例子一样。

var colors = ["red", "blue"];

colors.push("brown"); // 添加另一项

colors[3] = "black"; // 添加一项

alert(colors.length); // 4

var item = colors.pop(); // 取得最后一项

aler t(item); //"black"

队列方法:先进先出(first in first outside)

队列方法

栈数据结构的访问规则是LIFO(后进先出),而队列数据结构的访问规则是FIFO(First-In-First-Out,先进先出)。队列在列表的末端添加项,从列表的前端移除项。由于push()是向数组末端添加项的方法,因此要模拟队列只需一个从数组前端取得项的方法。实现这一操作的数组方法就是shift(),它能够移除数组中的第一个项并返回该项,同时将数组长度减1。结合使用shift()和push()方法,可以像使用队列一样使用数组。

var colors = new Array(); //创建一个数组

var count = colors.push("red", "green"); //推入两项

alert(count); //2

count = colors.push("black"); //推入另一项

alert(count); //3

var item = colors.shift(); //取得第一项

alert(item); //"red"

alert(colors.length); //2

这个例子首先使用push()方法创建了一个包含3 种颜色名称的数组。代码中加粗的那一行使用shift()方法从数组中取得了第一项,即"red"。在移除第一项之后,"green"就变成了第一项,而"black"则变成了第二项,数组也只包含两项了。ECMAScript 还为数组提供了一个unshift()方法。顾名思义,unshift()与shift()的用途相反:它能在数组前端添加任意个项并返回新数组的长度。因此,同时使用unshift()和pop()方法,可以从相反的方向来模拟队列,即在数组的前端添加项,从数组末端移除项,如下面的例子所示。

var colors = new Array(); //创建一个数组

var count = colors.unshift("red", "green"); //推入两项

alert(count); //2

count = colors.unshift("black"); //推入另一项

alert(count); //3

var item = colors.pop(); //取得最后一项

alert(item); //"green"

alert(colors.length); //2

这个例子创建了一个数组并使用unshift()方法先后推入了3 个值。首先是"red"和"green",然后是"black",数组中各项的顺序为"black"、"red"、"green"。在调用pop()方法时,移除并返回的是最后一项,即"green"。

具体应用如下:

splice()使用

删除:可以删除任意数量的项,只需指定2 个参数:要删除的第一项的位置和要删除的项数。例如,splice(0,2)会删除数组中的前两项。

插入:可以向指定位置插入任意数量的项,只需提供3 个参数:起始位置、0(要删除的项数)和要插入的项。如果要插入多个项,可以再传入第四、第五,以至任意多个项。例如,splice(2,0,"red","green")会从当前数组的位置2 开始插入字符串"red"和"green"。

替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定3 个参数:起始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。例如,splice (2,1,"red","green")会删除当前数组位置2 的项,然后再从位置2 开始插入字符串"red"和"green"。

复制代码 代码如下:

indexOf()和lastIndexOf()

indexOf()方法从数组的开头(位置0)开始向后查找lastIndexOf()方法则从数组的末尾开始向前查找。这两个方法都返回要查找的项在数组中的位置,或者在没找到的情况下返回-1

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ";
2020欧洲杯冠军竞猜官方网站,<html xmlns=";
<head>
    <title>栈方法</title>
    <script type="text/javascript">
        //栈是一种LIFO(last in first outside)后进先出的数据结构
       function basicPushOrPop(){
         var colors=["red","green","blue"];
         var count=colors.push("pink");//push()方法可以接收任意数量的参数,并把它们逐个添加到数据的末尾,并返回修改后数组的长度
         alert(count);

slice()、substr()和substring()

var stringValue = "hello world";

alert(stringValue.slice(3)); //"lo world"

alert(stringValue.substring(3)); //"lo world"

alert(stringValue.substr(3)); //"lo world"

alert(stringValue.slice(3, 7)); //"lo w"

alert(stringValue.substring(3,7)); //"lo w"

alert(stringValue.substr(3, 7)); //"lo worl"

var stringValue = "hello world";

alert(stringValue.slice(-3)); //"rld"

alert(stringValue.substring(-3)); //"hello world"

alert(stringValue.substr(-3)); //"rld"

alert(stringValue.slice(3, -4)); //"lo w"

alert(stringValue.substring(3, -4)); //"hel"

alert(stringValue.substr(3, -4)); //""(空字符串)

         var temp=colors.pop();//pop()方法则从数组末尾移除最后一项,减少数组的length值,然后返回移除的项
         alert(temp);
       }

       //队列数据结构的访问规则是FIFO(first in first outside)
       function basicShift(){
          var colors=new Array();
          var count=colors.push("red","blue");//推入两项
          alert(count);

          var temp=colors.shift();//取的队列中第一项的数据,并移除
          alert("现在数组长度为:" colors.length "--移除的项为:" temp);

          var newcount=colors.unshift("green","black");//unshift方法表示在队列前端添加任意个任意类型的值,并返回新的数组长度
          alert("现在数组长度为:" newcount);//ie unshift方法总是返回undefined
       }
    </script>
</head>
<body>
  <input type="button" value="栈方法" onclick="basicPushOrPop();" />
  <input type="button" value="队列方法" onclick="basicShift();" />
</body>
</html>

您可能感兴趣的文章:

  • 解析如何用两个栈来实现队列的方法

编辑:2020欧洲杯冠军竞猜官方网站 本文来源:JS栈方法和队列方法,Array栈方法和队列方法的特

关键词: 欧洲杯竞猜