第四章 栈

列表:

以表格为容器,装载着文字和图表的一种形式叫做列表。
数据结构中列表一般是指线性列表,是一种数据项构成的有序序列,即按照一定的线性顺序,排列而成的数据集合,一般操作有:插入,查找和删除。

栈:

栈是和列表一样的数据结构,栈是一种高效的数据结构,因为数据只能在栈顶删除或者添加,所以这样操作很快。
栈是一种特殊的列表,栈内的元素只能通过列表一端访问,这一段成为栈顶。栈被称作一种后入先出的数据结构。

对栈的两种主要操作:

  • 入栈使用push()方法
  • 出栈使用pop()方法 //可以返回栈顶的元素,但是栈顶的元素将会永久的删除。可以使用peek().只返回栈顶元素但不删除。

clear()方法清除站内的所有元素,length返回栈的长度。empty()方法表示栈内是否有元素。

栈的实现:

首先先定义一个类的构造函数来实现。

  function Stack(){
        this.dataStore=[];
        this.top=0;
        this.push=push;
        this.pop=pop;
        this.peek=peek;
        this.length=length
    }

构建一些常用的方法:

   function push(ele){
        this.dataStore[this.top++]=ele;
    }

    function pop(){
        return this.dataStore[--this.top]
    }

    function peek(){
        return this.dataStore[this.top-1]
    }
    function length(){
        return this.top;
    }

    function clear(){
        this.top=0;
    }

I++和++I的区别:

i++:先赋值在++
a=i++等同于a=i;i++
相反++i:先++在赋值
a=++i等同于i++,a=i

    for(var i=0;i<=10;i++){
        a=++j;
        console.log(a,j);
    }
//
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
10 11
 var j=0;
    for(var i=0;i<=10;i++){
        a=++j;
        console.log(a,j);
    }

//
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11

使用stack类:

1.数制间的相互转换
2.回文(一个单词,短语,数字)从前往后和从后往前写都是一样的

    function ishuiwen(string){
    var s=new Stack();
        var i=0;
    while(i<string.length){
        s.push(string[i]);
        i++
    }
      var _string="";
      while(s.length()>0){
          _string+=s.pop()
      }
        if(string==_string){
            console.log('is a huiwenshu')
        }
        else{
            console.log('is not a huiwenshu')
        }
    }
    ishuiwen('dad')

3.递归演示
求5的阶乘:

    function jc(n){
        if(n==0){
            return 1;
        }
        else{
         return  n*jc(n-1);
        }
    }

使用栈的写法:

    function jc(n){
        var s=new Stack();
        while(n>1){
            s.push(n--)
        }
        var num=1;
        while(s.length()>0){
            num*= s.pop()
        }
        return num;
    }

    console.log(jc(5))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值