1. 程式人生 > 實用技巧 >資料結構-棧<Typescript>

資料結構-棧<Typescript>

什麼是棧

棧是一種特殊的列表,棧內的元素只能通過列表的一端訪問,這一端稱為棧頂。咖啡廳內的一摞盤子是現實世界中常見的棧的例子。
只能從最上面取盤子,盤子洗淨後,也只能摞在這一摞盤子的最上面。棧被稱為一種後入先出(LIFO,last-in-first-out)的資料結構。
由於棧具有後入先出的特點,所以任何不在棧頂的元素都無法訪問。為了得到棧底的元素,必須先拿掉上面的元素。對棧的兩種主要操
作是將一個元素壓入棧和將一個元素彈出棧。入棧使用 push() 方法,出棧使用 pop() 方法。另一個常用的操作是預覽棧頂的元素。pop()
方法雖然可以訪問棧頂的元素,但是呼叫該方法後,棧頂元素也從棧中被永久性地刪除了。peek() 方法則只返回棧頂元素,而不刪除它。

classStack<T>{
privateitems:Array<T>=[];
/* 向棧裡新增元素 */
publicpush(element:T):void{
this.items.push(element);
}
/* 從棧內彈出一個元素 */
publicpop():T{
returnthis.items.pop();
}
/* 返回棧頂的元素 */
publicpeek():T{
returnthis.items[this.items.length-1];
}
/* 判斷棧是否為空 */
publicisEmpty():boolean{
returnthis.items.length==0;
}
/* 棧長度 */ publicsize():number{ returnthis.items.length; } /* 清空棧 */ publicclear():void{ this.items=[]; } /* 列印棧內所有元素 */ publicprint():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