如何在JavaScript中实现堆栈和队列?

922

如何在JavaScript中实现栈(Stack)和队列(Queue)?

我想要使用逆波兰表达式算法,因此需要这些数据结构。


作为一个循环缓冲区 - baz
32个回答

0
创建一对类,提供这些数据结构的各种方法(push、pop、peek等)。现在实现这些方法。如果您熟悉栈/队列背后的概念,这应该很简单。您可以使用数组实现堆栈,使用链表实现队列,尽管肯定还有其他方法可行。JavaScript将使此过程变得容易,因为它是弱类型的,因此您甚至不必担心通用类型,如果您在Java或C#中实现它,则必须这样做。

0

你可以在ES6类中使用WeakMaps来实现私有属性,并且JavaScript语言中的String属性和方法具有以下优点:

const _items = new WeakMap();

class Stack {
  constructor() {
    _items.set(this, []);
  }

push(obj) {
  _items.get(this).push(obj);
}

pop() {
  const L = _items.get(this).length;
  if(L===0)
    throw new Error('Stack is empty');
  return _items.get(this).pop();
}

peek() {
  const items = _items.get(this);
  if(items.length === 0)
    throw new Error ('Stack is empty');
  return items[items.length-1];
}

get count() {
  return _items.get(this).length;
}
}

const stack = new Stack();

//now in console:
//stack.push('a')
//stack.push(1)
//stack.count   => 2
//stack.peek()  => 1
//stack.pop()   => 1
//stack.pop()   => "a"
//stack.count   => 0
//stack.pop()   => Error Stack is empty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接