• 数据结构-栈<Typescript>


    什么是栈

    栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。咖啡厅内的一摞盘子是现实世界中常见的栈的例子。
    只能从最上面取盘子,盘子洗净后,也只能摞在这一摞盘子的最上面。栈被称为一种后入先出(LIFO,last-in-first-out)的数据结构。
    由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问。为了得到栈底的元素,必须先拿掉上面的元素。对栈的两种主要操
    作是将一个元素压入栈和将一个元素弹出栈。入栈使用 push() 方法,出栈使用 pop() 方法。另一个常用的操作是预览栈顶的元素。pop()
    方法虽然可以访问栈顶的元素,但是调用该方法后,栈顶元素也从栈中被永久性地删除了。peek() 方法则只返回栈顶元素,而不删除它。
    push()、pop() 和 peek() 是栈的 3 个主要方法,但是栈还有其他方法和属性。clear() 方法清除栈内所有元素,size()方法返回栈里的元素
    个数。顺便定义了一个 isEmpty(),用来表示栈内是否含有元素。

    class Stack<T>{
        private items:Array<T> = [];
        /* 向栈里添加元素 */
        public push(element:T):void{
            this.items.push(element);
        }
        /* 从栈内弹出一个元素 */
        public pop():T{
            return this.items.pop();
        }
        /* 返回栈顶的元素 */
        public peek():T{
            return this.items[this.items.length - 1];
        }
        /* 判断栈是否为空 */
        public isEmpty():boolean{
            return this.items.length == 0;
        }
        /* 栈长度 */
        public size():number{
            return this.items.length;
        }
        /* 清空栈 */
        public clear():void{
            this.items = [];
        }
        /* 打印栈内所有元素 */
        public print():void{
            console.log(this.items.toString());
        }
    }
    let stack:Stack<string> = new Stack<string>();
    stack.push("yoyo");
    stack.push("gigi");
    stack.push("vivi");
    stack.print();//yoyo,gigi,vivi
    stack.pop();
    stack.print();yoyo,gigi

    利用栈解决是否是回文

    回文是指这样一种现象:一个单词、短语或数字,从前往后写和从后往前写都是一样的。 比如,单词“dad”、“racecar”就是回文;如果忽略空格和标点
    符号,下面这个句子也是回 文,“A man, a plan, a canal: Panama”;数字 1001 也是回文。 使用栈,可以轻松判断一个字符串是否是回文。我们将拿到
    的字符串的每个字符按从左至 右的顺序压入栈。当字符串中的字符都入栈后,栈内就保存了一个反转后的字符串,最后 的字符在栈顶,第一个字符在栈底。

     利用前面定义的Stack类来判断给定的字符串是否是回文的程序

    function isPalindrome(str:string):boolean{
        let s:Stack<string> = new Stack<string>();
        let reverseStr:string = "";
        for(let i:number = 0; i < str.length; i++){
            s.push(str[i]);
        }
        while(s.size() > 0){
            reverseStr += s.pop();
        }
        if(str == reverseStr){
            return true;
        }else{
            return false;
        }
    }
    let arrStr:Array<string> = ["racecar","hello","12321"];
    arrStr.forEach((value)=>{
        console.log(isPalindrome(value));
    })
    //true false true
  • 相关阅读:
    <context-param>与<init-param>的区别与作用(转自青春乐园)(
    使用Derby ij客户端工具
    转载 Ofbiz 入门教程
    数据库中插入和读取图片
    事务的使用
    存储过程
    触发器 的使用
    JS面试题及答案
    课程主页面三个接口开发
    增加media文件配置
  • 原文地址:https://www.cnblogs.com/kootimloe/p/14193753.html
Copyright © 2020-2023  润新知