泛型 栈 结构

/**栈接口 */
interface Stack<T>{
    /**入栈 */
    push(item:T):void;
    /**出栈 */
    pop():T|undefined;
    /**取出栈顶元素 */
    peek():T|undefined;
    /**非空判断 */
    isEmpty():boolean;
    /**栈长 */
    size():number;
}

/**泛型栈结构 */
class StackImpl<T> implements Stack<T>{

    private items:Array<T>=[];

    push(item: T): void {
        this.items.push(item);
    }

    pop(): T|undefined {
        return this.items.pop();
    }

    peek(): T|undefined {
        return this.items[this.items.length-1];
    }

    isEmpty(): boolean {
        return this.items.length===0;
    }

    size(): number {
        return this.items.length;
    }

}

/**
 * 在TS中,数组、字符串、数组、接口非常常见
 * 如果要定义一个对象的key和value类型,可以用到TS的Record:Record后面的泛型就是对象键和值的类型
 * Record<K, T>构造具有给定类型T的一组属性K的类型
 * 
 * 此处通过工厂方法,产出一个泛型栈
 * 通过Record 类型,存储泛型栈的,K(string 类型)--V(栈结构类型)
 */
class StackFactory{
    private static ins:Record<string,Stack<any>>={};
    public static getInstance<T>(key:string):Stack<T>{
        if(!(key in StackFactory.ins)){
            StackFactory.ins[key]=new StackImpl<T>();
        }
        return StackFactory.ins[key] as Stack<T>;    
    }

    public static clearIns():void{
        StackFactory.ins={};
    }
}

/**---------------------使用方法----------------------------- */
/*
const numberStack =StackFactory.getInstance<number>('numberStack');
numberStack.push(1);
numberStack.push(2);
console.log(numberStack.pop());//输出: 2
*/

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值