基础数据结构栈(Stack) 学习与应用

本文深入讲解了栈(Stack)这一“后进先出”(LIFO)数据结构的基本概念、特性及其实现方法,并通过具体实例展示了其在括号匹配验证、数值转换以及游戏UI管理等场景中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础数据结构栈(Stack) 学习与应用

  • 什么是栈?
  • 基本特点
  • 图解原理
  • 代码实现
  • 应用场景
什么是栈(Stack)?

栈是一种“后进先出”(LIFO)的数据结构 ,是一种特殊的线性表。

基本特点

遵循定义里的两个重要性质。 一、线性表。 所以元素的增删改查操作都只能在表的一端进行,即栈顶。 二、遵循“后进先出”(LIFO)的原则。最后添加的元素总是在最先出栈,栈对元素的访问加以限制,仅仅提供对栈顶元素的访问操作

图解原理


stackpush


stackpop

其中data1为栈底, data4处为栈顶

代码实现
export interface IStack<T>{
    //判断栈空
    empty(): boolean;
    //判断栈满
    full(): void;
    //清除栈
    clear(): void;
    //入栈
    push(elem T);
    //出栈
    pop(): T|undefined;
    //查看栈顶
    peek(): T|undefined;
}
export class Stack <T>{
	protected _elems: T[] = [];
    protected _maxLength: number = 0;
    protected _length: number = 0;
    constructor(maxLength: number = Infinity){
        this.setMaxLength(maxLength);
    }

    get maxLength(): number{
        return this._maxLength;
    }

    private setMaxLength(val: number){
        this._maxLength = val;
    }

    clear(){
        this._elems = [];
    }

    get length(): number{
        return this._elems.length;
    }

    empty(): boolean{
        return this._elems.length === 0;
    }

    full () {
        return this._elems.length === this._maxLength;
    }

    push(elem: T){
        if(this.full()){
            return false;
        }
        this._elems.push(elem);
        return true;
    }

    pop(): T | undefined{
        if(this.empty()){
            return undefined;
        }
        return this._elems.pop();
    }

    peek(): T| undefined{
        if(this.empty()){
            return undefined;
        }
        return this._elems[this._elems.length - 1];
    }
}
应用场景
  • 判断单个括号是否平衡,判断左右括号是否匹配

((((()

()))

((()))

  • 将十进制转化为二进制数

将十进制数不断除以2,将余数入栈,最后再一次弹出

  • 在游戏中应用, 管理UI显示。

UI 的显示正好符合“后进先出”的原则

export class Panel{
   show (){
       
   }
    hide (){
        
    }
}

export class UIManager{
    _panelStack: Stack<Stack<Panel>> = new Stack();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值