用js实现数据结构(二)---栈和队列

69 阅读1分钟

一、栈

栈是一种十分常见的数据结构,可以解决的问题有很多,比如括号匹配、表达式求值、递归等,用简单的话描述他的特点就是:先进后出,后进先出。

实现

        class Stack {
            constructor() {
                // 基于数组实现的顺序栈
                this._Stack = [];
            }
            Push(item) {
                this._Stack.push(item);
            }
            Pop() {
                return !this.isEmpty() ? this._Stack.pop() : null;
            }
            peek() {
                return !this.isEmpty() ? this._Stack[this._Stack.length - 1] : null;
            }
            Size() {
                return this._Stack.length;
            }
            Clear() {
                return this._Stack.length = 0;
            }
            isEmpty() {
                return this.Size() === 0;
            }
        }
        let stack = new Stack();
        for(let i = 0; i < 6; i++) {
            stack.Push(i);
        }
        console.log(stack.peek()); // 5
        console.log(stack.Pop()); // 5
        console.log(stack.Pop()); // 4
        console.log(stack.Pop()); // 3
        console.log(stack.Pop()); // 2
        console.log(stack.Pop()); // 1
        console.log(stack.Pop()); // 0
        console.log(stack.Pop()); // null

二、队列

队列和栈十分相似,他的特点也同样可以用一句话概括:先进先出,后进后出。在js典型的应用就是事件队列。

实现

        class Queue {
            constructor() {
                // 基于数组实现的顺序栈
                this._Queue = [];
            }
            Enqueue(item) {
                this._Queue.push(item);
            }
            Dequeue() {
                return !this.isEmpty() ? this._Queue.shift() : null;
            }
            QueueFront() {
                return !this.isEmpty() ? this._Queue[this._Queue.length - 1] : null;
            }
            Size() {
                return this._Queue.length;
            }
            Clear() {
                return this._Queue.length = 0;
            }
            isEmpty() {
                return this.Size() === 0;
            }
        }
        let queue = new Queue();
        for(let i = 0; i < 6; i++) {
            queue.Enqueue(i);
        }
        console.log(queue.QueueFront()); // 5
        console.log(queue.Dequeue()); // 0
        console.log(queue.Dequeue()); // 1
        console.log(queue.Dequeue()); // 2
        console.log(queue.Dequeue()); // 3
        console.log(queue.Dequeue()); // 4
        console.log(queue.Dequeue()); // 5
        console.log(queue.Dequeue()); // null