Typescript實現(xiàn)棧的方法示例
棧的概念
棧(Stack):是只允許在一端進(jìn)行插入或刪除的線性表。首先棧是一種線性表,但限定這種線性表只能在某一端進(jìn)行插入和刪除操作。此外,棧還遵循后進(jìn)先出(LIFO)原則,或者說先進(jìn)后出原則。
棧頂:線性表插入或者刪除元素的一端。
棧的操作
- 入棧:添加一個新元素至棧頂
- 出棧:將棧頂元素移除并返回被移除的元素
- 獲取棧頂元素:獲取當(dāng)前棧頂元素并返回
- 判斷棧是否為空:判斷棧中是否有數(shù)據(jù)即可
- 清空棧:移除棧內(nèi)所有的元素
- 獲取棧的大?。悍祷貤V性氐膫€數(shù)
- 打印棧中元素:遍歷并輸出棧中元素
功能實現(xiàn)描述
上述操作中其實有很多都有現(xiàn)成的API可以直接使用并實現(xiàn)上實現(xiàn)上述操作:
1. 入棧(push):可以使用數(shù)組的push方法直接往數(shù)組的末尾添加元素。
2. 出棧(pop):可以使用數(shù)組的pop方法直接移除棧中的元素,該方法會返回當(dāng)前被移除的元素。
3. 獲取棧頂元素(peek):可以通過數(shù)組的長度-1獲取到數(shù)組中的最后一個元素。
4. 判斷棧是否為空(isEmpty):可以通過判斷數(shù)組的長度是否為0來實現(xiàn)。
5. 清空棧(clear):可以將數(shù)組直接賦值為空或者調(diào)用出棧方法直至棧中的數(shù)據(jù)為空。
6. 獲取棧的大?。褐苯臃祷貤5拈L度即可
代碼實現(xiàn)
入棧
//入棧 push(item:T){ this.items.push(item); }
出棧
//出棧 pop(){ return this.items.pop(); }
返回棧頂元素
//返回棧頂元素 peek(){ return this.items[this.items.length-1]; }
判斷棧是否為空
//判斷棧是否為空 isEmpty(){ return this.items.length ? false : true; }
清空棧的元素
clear(){ this.items = []; }
獲取棧的大小
//獲取棧內(nèi)元素數(shù)量 size():number{ return this.items.length; }
輸出棧內(nèi)數(shù)據(jù)
print_stack(){ if(this.isEmpty()) console.log('棧為空'); for(let i = 0;i < this.items.length;i++){ console.log(this.items[i]); } }
測試
let stack_example = new stack(); //添加兩個元素 stack_example.push(5); stack_example.push(6); //判斷是否棧為空 if(stack_example.isEmpty()) {console.log('棧為空')} else {console.log('棧不為空')} //打印棧中元素 stack_example.print_stack(); //輸出棧中元素數(shù)量 console.log('棧中有:'+stack_example.size()+'個元素'); //刪除棧頂元素 stack_example.pop() //再次打印棧中元素 stack_example.print_stack();
測試結(jié)果如下:
完整代碼實現(xiàn)
//棧的實現(xiàn) //數(shù)組棧 class stack<T>{ private items:T[] constructor(){ this.items = []; } //入棧 push(item:T){ this.items.push(item); } //出棧 pop(){ return this.items.pop(); } //返回棧頂元素 peek(){ return this.items[this.items.length-1]; } //判斷棧是否為空 isEmpty(){ return this.items.length ? false : true; } //清空棧的棧內(nèi)元素 clear(){ this.items = []; } //輸出棧內(nèi)數(shù)據(jù) print_stack(){ if(this.isEmpty()) console.log('棧為空'); for(let i = 0;i < this.items.length;i++){ console.log(this.items[i]); } } //獲取棧內(nèi)元素數(shù)量 size():number{ return this.items.length; } } let stack_example = new stack(); //添加兩個元素 stack_example.push(5); stack_example.push(6); //判斷是否棧為空 if(stack_example.isEmpty()) {console.log('棧為空')} else {console.log('棧不為空')} //打印棧中元素 stack_example.print_stack(); //輸出棧中元素數(shù)量 console.log('棧中有:'+stack_example.size()+'個元素'); //刪除棧頂元素 stack_example.pop() //再次打印棧中元素 stack_example.print_stack();
到此這篇關(guān)于Typescript實現(xiàn)棧的方法示例的文章就介紹到這了,更多相關(guān)Typescript 棧內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
分享9點個人認(rèn)為比較重要的javascript 編程技巧
接觸和學(xué)習(xí)javascript也有3~4年了,真正牽扯到前后臺數(shù)據(jù)的交互,數(shù)據(jù)算法等高級編程知之甚少,甚至很少用,如果你問我你知道js什么知識呢?我可能只能說知道點jQuery的技巧,說編程都談不上,所以需要把某一些技巧作為編程習(xí)慣固定下來,免于以后有人問我你知道什么?2015-04-04javascript權(quán)威指南 學(xué)習(xí)筆記之變量作用域分享
最近一直在看《javascript權(quán)威指南 第五版》,變量作用域這一章,看得真的有點累。不過,收獲還是多多。2011-09-09clipboard.js無需Flash無需依賴任何JS庫實現(xiàn)文本復(fù)制與剪切
這篇文章主要實現(xiàn)了無需Flash無需依賴任何JS庫實現(xiàn)文本復(fù)制與剪切,是一款極現(xiàn)代的,不需要flash,不依賴任何其他js庫的非常小的插件,叫clipboard.js,感興趣的小伙伴們可以參考一下2015-10-10js使用split函數(shù)按照多個字符對字符串進(jìn)行分割的方法
這篇文章主要介紹了js使用split函數(shù)按照多個字符對字符串進(jìn)行分割的方法,實例分析了split函數(shù)的使用技巧,非常具有實用價值,需要的朋友可以參考下2015-03-03es6 javascript對象Object.values() , Object.entr
這篇文章主要介紹了es6 javascript對象Object.values() , Object.entries()的示例代碼,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12