堆栈的实现与单元测试 -- 小刘

堆栈

  • 堆栈的性质
    LIFO
    push/pop
    overflow/underflow
  • 实现堆栈
  • 单元测试

堆栈的性质
在这里插入图片描述
在这里插入图片描述
实现堆栈

// 堆栈
class Stack{
  constructor(max =1000){
    //空间
    this.data = new Array(max)
    //栈顶(栈指针)
    this.top = -1
    
    this.max = max
  }
  push(x){
    if(this.top === this.max -1){
      throw 'stack overflow'
    }
    this.top ++
    this.data[this.top] = x
  }
  pop(){
    if(this.top === -1){
      throw 'stack underflow'
    }
    const x = this.data[this.top]
    this.top --
    return x
  }
}
module.exports = Stack

单元测试
用到npm中的第三方包,我一般把这种常用的装到全局
全局安装 chai

npm i -g chai

全局安装 mocha

npm i -g mocha
const { assert } = require('chai')
const Stack = require('./stack')

describe('测试堆栈', () => {
  it('LIFO', () => { 
    const s = new Stack(1000)
    for (let i = 1; i <= 5; i++) {
      s.push(i)
    }
    assert.equal(s.pop(), 5)
    assert.equal(s.pop(), 4)
    assert.equal(s.pop(), 3)
    assert.equal(s.pop(), 2)
    assert.equal(s.pop(), 1)
  })
  it('stack overflow-1', () => { 
    const s = new Stack(1000)
    let error = null
    try {
      for (let i = 0; i < 1001; i++) {
        s.push(i)
      }
    } catch (ex){ 
      error = ex
    }
    assert.equal(error,'stack overflow')
  })
  it('stack overflow-2', () => { 
    const s = new Stack(1000)
    let error = null
    try {
      for (let i = 0; i < 999; i++) {
        s.push(i)
      }
    } catch (ex){ 
      error = ex
    }
    assert.equal(error,null)
  })
  it('stack underflow', () => {
    const s = new Stack()
    let error = null
    try{
      s.pop()
    }catch(ex){
      error=ex
    }
    assert.equal(error,'stack underflow')
  })
  it('性能测试',()=>{
    const s = new Stack(1000000)
    const t = new Date().getTime()
    for(let i = 0;i<1000000;i++){
      s.push(i)
    }
    assert.equal(
      new Date().getTime() - t < 50,
      true,
      "性能不达标"
    )
  })
})

通过 mocha 运行这个js
这个是已经我调试好的,例子是我自己想用的,如果想要一点没问题都没,就用用例了,想leetcode里面一样
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳晓黑胡椒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值