数据结构-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--;
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值