队列的实现与单元测试 -- 小刘

队列

  • 队列的性质
    FIFO
    enqueue/dequeue
    overflow/underflow
  • 实现队列
  • 单元测试

队列的性质
在这里插入图片描述
在这里插入图片描述
实现队列

class Queue{
  constructor(max = 1000){
    this.max= max
    this.data = new Array(max)
    this.head = 0
    this.tail = 0
    this.size = 0
  }
  // 入列
  enqueue(x){
    if(this.size === this.max){throw 'overflow'}
    this.data[this.tail] = x
    this.size ++
    if(this.tail === this.max - 1){
      this.tail = 0
    }else{
      this.tail ++
    }
  }
  // 出列
  dequeue(){
    // underflow
    if(this.size===0){throw 'underflow'}
    this.size --
    const x = this.data[this.head]
    this.head++
    return x
  }

  get length(){//ES6 访问length,返回 top+1
    return this.size
  }
}
module.exports = Queue

单元测试

const { assert } = require('chai')
const Queue = require('./queue')
console.log(Queue)
describe('测试堆栈', () => {
  it('FIFO', () => { 
    //stack/set (集合)
    const s = new Queue(1000)
    for (let i = 1; i <= 5; i++) {
      s.enqueue(i)
    }
    for(let i=1;i<5;i++){
      assert.equal(s.dequeue(), i)
    }
  })
  it('stack overflow-1', () => { 
    const s = new Queue(1000)
    let error = null
    try {
      for (let i = 0; i < 1001; i++) {
        s.enqueue(i)
      }
    } catch (ex){ 
      error = ex
    }
    assert.equal(error,'overflow')
  })
  it('stack overflow-2', () => { 
    const s = new Queue(1000)
    let error = null
    try {
      for (let i = 0; i < 1000; i++) {
        s.enqueue(i)
      }
    } catch (ex){ 
      error = ex
    }
    assert.equal(error,null)
  })
  it('stack underflow', () => {
    const s = new Queue()
    let error = null
    try{
      s.dequeue()
    }catch(ex){
      error=ex
    }
    assert.equal(error,'underflow')
  })
  it('性能测试',()=>{
    const s = new Queue(1000000)
    const t = new Date().getTime()
    for(let i = 0;i<1000000;i++){
      s.enqueue(i)
    }
    assert.equal(
      new Date().getTime() - t < 30,
      true,
      "性能不达标"
    )
  })
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

柳晓黑胡椒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值