Typescript實(shí)現(xiàn)棧的方法示例
棧的概念
棧(Stack):是只允許在一端進(jìn)行插入或刪除的線性表。首先棧是一種線性表,但限定這種線性表只能在某一端進(jìn)行插入和刪除操作。此外,棧還遵循后進(jìn)先出(LIFO)原則,或者說(shuō)先進(jìn)后出原則。
棧頂:線性表插入或者刪除元素的一端。

棧的操作
- 入棧:添加一個(gè)新元素至棧頂
- 出棧:將棧頂元素移除并返回被移除的元素
- 獲取棧頂元素:獲取當(dāng)前棧頂元素并返回
- 判斷棧是否為空:判斷棧中是否有數(shù)據(jù)即可
- 清空棧:移除棧內(nèi)所有的元素
- 獲取棧的大?。悍祷貤V性氐膫€(gè)數(shù)
- 打印棧中元素:遍歷并輸出棧中元素
功能實(shí)現(xiàn)描述
上述操作中其實(shí)有很多都有現(xiàn)成的API可以直接使用并實(shí)現(xiàn)上實(shí)現(xiàn)上述操作:
1. 入棧(push):可以使用數(shù)組的push方法直接往數(shù)組的末尾添加元素。
2. 出棧(pop):可以使用數(shù)組的pop方法直接移除棧中的元素,該方法會(huì)返回當(dāng)前被移除的元素。
3. 獲取棧頂元素(peek):可以通過(guò)數(shù)組的長(zhǎng)度-1獲取到數(shù)組中的最后一個(gè)元素。
4. 判斷棧是否為空(isEmpty):可以通過(guò)判斷數(shù)組的長(zhǎng)度是否為0來(lái)實(shí)現(xiàn)。
5. 清空棧(clear):可以將數(shù)組直接賦值為空或者調(diào)用出棧方法直至棧中的數(shù)據(jù)為空。
6. 獲取棧的大小:直接返回棧的長(zhǎng)度即可
代碼實(shí)現(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)元素?cá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]);
}
}
測(cè)試
let stack_example = new stack();
//添加兩個(gè)元素
stack_example.push(5);
stack_example.push(6);
//判斷是否棧為空
if(stack_example.isEmpty()) {console.log('棧為空')}
else {console.log('棧不為空')}
//打印棧中元素
stack_example.print_stack();
//輸出棧中元素?cái)?shù)量
console.log('棧中有:'+stack_example.size()+'個(gè)元素');
//刪除棧頂元素
stack_example.pop()
//再次打印棧中元素
stack_example.print_stack();
測(cè)試結(jié)果如下:

完整代碼實(shí)現(xiàn)
//棧的實(shí)現(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)元素?cái)?shù)量
size():number{
return this.items.length;
}
}
let stack_example = new stack();
//添加兩個(gè)元素
stack_example.push(5);
stack_example.push(6);
//判斷是否棧為空
if(stack_example.isEmpty()) {console.log('棧為空')}
else {console.log('棧不為空')}
//打印棧中元素
stack_example.print_stack();
//輸出棧中元素?cái)?shù)量
console.log('棧中有:'+stack_example.size()+'個(gè)元素');
//刪除棧頂元素
stack_example.pop()
//再次打印棧中元素
stack_example.print_stack();到此這篇關(guān)于Typescript實(shí)現(xiàn)棧的方法示例的文章就介紹到這了,更多相關(guān)Typescript 棧內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- TypeScript之調(diào)用棧的實(shí)現(xiàn)
- TypeScript棧的壓入與彈出序列校驗(yàn)
- 前端算法之TypeScript包含min函數(shù)的棧實(shí)例詳解
- TypeScript數(shù)組實(shí)現(xiàn)棧與對(duì)象實(shí)現(xiàn)棧的區(qū)別詳解
- Typescript是必須要學(xué)習(xí)嗎?如何學(xué)習(xí)TS全棧開(kāi)發(fā)
- 數(shù)據(jù)結(jié)構(gòu)TypeScript之棧和隊(duì)列詳解
- TypeScript數(shù)據(jù)結(jié)構(gòu)棧結(jié)構(gòu)Stack教程示例
相關(guān)文章
微信公眾號(hào)h5使用微信支付及支付寶支付的步驟(前端)
微信H5支付是一種支付解決方案,主要適用于商戶在微信客戶端外的移動(dòng)端網(wǎng)頁(yè)上展示商品或服務(wù)的場(chǎng)景,這篇文章主要給大家介紹了關(guān)于微信公眾號(hào)h5使用微信支付及支付寶支付(前端)的相關(guān)資料,需要的朋友可以參考下2024-07-07
分享9點(diǎn)個(gè)人認(rèn)為比較重要的javascript 編程技巧
接觸和學(xué)習(xí)javascript也有3~4年了,真正牽扯到前后臺(tái)數(shù)據(jù)的交互,數(shù)據(jù)算法等高級(jí)編程知之甚少,甚至很少用,如果你問(wèn)我你知道js什么知識(shí)呢?我可能只能說(shuō)知道點(diǎn)jQuery的技巧,說(shuō)編程都談不上,所以需要把某一些技巧作為編程習(xí)慣固定下來(lái),免于以后有人問(wèn)我你知道什么?2015-04-04
JavaScript對(duì)數(shù)字的判斷與處理實(shí)例分析
這篇文章主要介紹了JavaScript對(duì)數(shù)字的判斷與處理方法,實(shí)例分析了javascript判斷數(shù)字的常見(jiàn)方法與針對(duì)數(shù)字處理的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02
js仿支付寶填寫支付密碼效果實(shí)現(xiàn)多方框輸入密碼
這篇文章主要介紹了js仿支付寶填寫支付密碼效果實(shí)現(xiàn)多方框輸入密碼的功能,感興趣的小伙伴們可以參考一下2016-03-03
javascript權(quán)威指南 學(xué)習(xí)筆記之變量作用域分享
最近一直在看《javascript權(quán)威指南 第五版》,變量作用域這一章,看得真的有點(diǎn)累。不過(guò),收獲還是多多。2011-09-09
clipboard.js在移動(dòng)端復(fù)制失敗的解決方法
最近在使用clipboard.js碰到的一個(gè)小問(wèn)題,通過(guò)查找相關(guān)資料解決了,所以下面這篇文章主要給大家介紹了關(guān)于clipboard.js在移動(dòng)端復(fù)制失敗的解決方法,需要的朋友可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06
clipboard.js無(wú)需Flash無(wú)需依賴任何JS庫(kù)實(shí)現(xiàn)文本復(fù)制與剪切
這篇文章主要實(shí)現(xiàn)了無(wú)需Flash無(wú)需依賴任何JS庫(kù)實(shí)現(xiàn)文本復(fù)制與剪切,是一款極現(xiàn)代的,不需要flash,不依賴任何其他js庫(kù)的非常小的插件,叫clipboard.js,感興趣的小伙伴們可以參考一下2015-10-10
js使用split函數(shù)按照多個(gè)字符對(duì)字符串進(jìn)行分割的方法
這篇文章主要介紹了js使用split函數(shù)按照多個(gè)字符對(duì)字符串進(jìn)行分割的方法,實(shí)例分析了split函數(shù)的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-03-03
es6 javascript對(duì)象Object.values() , Object.entr
這篇文章主要介紹了es6 javascript對(duì)象Object.values() , Object.entries()的示例代碼,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12

