队列
- 队列的性质
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,
"性能不达标"
)
})
})