数据结构-JavaScript实现顺序队列、双向队列、循环队列

    /**
     * 普通队列
     */
    class Queue {
    
    
        data: any[];
        size: number;
        constructor(maxlength: number) {
    
    
            this.data = [];
            this.size = maxlength;
        }
        enQueue(value: any) {
    
    
            if (this.getLength() < this.size) {
    
    
                this.data.push(value);
                return;
            }
            console.error('The queue is full!');
        }
        deQueue(): any {
    
    
            if (!this.isEmpty()) {
    
    
                return this.data.shift();
            }
        }
        getLength(): number {
    
    
            return this.data.length;
        }
        isEmpty() {
    
    
            return this.data.length === 0;
        }
        clear() {
    
    
            this.data.length = 0;
        }
        print() {
    
    
            for (const iterator of this.data) {
    
    
                console.log(iterator)
            }
        }
    }
    /**
     * 双向对列
     */
    class Dique {
    
    
        data: any[];
        size: number;
        constructor(maxlength: number) {
    
    
            this.data = [];
            this.size = maxlength;
        }
        /**
         * 头部入队
         * @param value 要插入的值
         */
        frontEnQueue(value: any) {
    
    
            if (this.getLength() < this.size) {
    
    
                this.data.unshift(value);
                return;
            }
            console.error('The queue is full!');
        }
        /**
         * 尾部入队
         * @param value 要插入的值
         */
        rearEnQueue(value: any) {
    
    
            if (this.getLength() < this.size) {
    
    
                this.data.push(value);
                return;
            }
            console.error('The queue is full!');
        }
        /**
         * 头部出队
         */
        frontDeQueue(): any {
    
    
            if (!this.isEmpty()) {
    
    
                return this.data.shift();
            }
        }
        /**
         * 尾部出队
         */
        rearDeQueue(): any {
    
    
            if (!this.isEmpty()) {
    
    
                return this.data.pop();
            }
        }
        getLength(): number {
    
    
            return this.data.length;
        }
        isEmpty() {
    
    
            return this.data.length === 0;
        }
        clear() {
    
    
            this.data.length = 0;
        }
        print() {
    
    
            for (const iterator of this.data) {
    
    
                console.log(iterator)
            }
        }
    }
    /**
     * 循环队列
     */
    class CycleQueue {
    
    
        /**队列头 */
        front: number = 0;
        /**队列尾 */
        rear: number = 0;
        /**队列大小 */
        length: number;
        /**当前入队数量 */
        count: number = 0;
        data: any[] = [];
        constructor(maxLength: number) {
    
    
            this.length = maxLength;
        }
        enQueue(value: any) {
    
    
            if (this.count === this.length) {
    
    
                throw new Error('The queue is full!');
            }
            this.data[this.rear] = value;
            this.rear = (this.rear + 1) % this.length;
            this.count++;
        }
        deQueue() {
    
    
            if (this.count === 0) {
    
    
                throw new Error('The queue is empty!');
            }
            this.front = (this.front + 1) % this.length;
            this.count--;
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_41885871/article/details/105249708
今日推荐