棧是資料結構中最基本的一種結構,對於資料來說,很多時候都是對資料的增、刪、查、改
1.棧在生活中的常見例子
一摞書、堆盤子
2.棧的特點
先進後出(fist in last out,filo)
3.棧的實現
1)建立棧
function stack()
2)棧中宣告的方法
增:push(element(s)):新增乙個或多個元素到棧頂
刪:pop():移除棧頂的元素,同時返回被移除的元素
查:peek():返回棧頂的元素,不對棧做任何修改
isempty():檢視棧是否為空,如果是,則返回true,為否,則為false
size():檢視棧中元素個數,返回值為棧中元素的個數
改:clear():清空棧內的所有元素
3)具體實現
增:將元素進棧
this.push=function(element)
刪:將元素出棧
this.pop=function()
查:
1)檢視棧頂元素
this.peek=function()
2)檢視棧是否為空
this.isempty=function()
3)檢視當前棧的元素個數
this.size=function()
改:改動棧內元素(這裡不是很準確,資料中的改應該是對某個元素來改動,這裡為了方便自己記住,就這麼歸類了)
this.clear=function()
列印棧中的所有元素:
使用tostring()方法,將陣列轉為字串
this.print=function()
4.完整實現**
function stack()
this.pop=function()
this.peek=function()
this.size=function()
this.isempty=function()
this.clear=function()
this.print=function()
}//測試部分
//宣告乙個例項
let stack=new stack();
stack.isempty();//檢視棧是否為空
stack.push(1);
stack.push(2);
console.log(stack.pop());
console.log(stack.size());
console.log(stack.isempty());
console.log(stack.peek());
console.log(stack.print());
5.棧的應用
在回溯問題中,可以儲存訪問過的任務或路徑、撤銷操作
使用棧的三個著名演算法:
1)十進位制轉二進位制問題
2)平衡圓括號問題
3)漢諾塔問題
十進位制轉二進位制
思路:除2取餘法,將每次求餘得到的數入棧,出棧的順序則為二進位制數
function divideby2(decnumber)
while(!remstack.isempty())
return binarystring;
}//測試例子
console.log(divdeby2(10));
擴充套件,實現十進位制與任意進製轉換演算法
function baseconverter(decnumber,base)
while(!remstack.isempty())
return basestring;
}//測試例子
console.log(baseconverter(100345,2));
資料結構與演算法 二 (棧 佇列)
這篇筆記主要寫棧和佇列,因為他們的特點是相反的 一 棧特點 先進後出,類似於子彈入彈夾,先進去的子彈最後才發射 這裡也使用陣列來模擬一下,有四個方法,壓棧,取棧,檢視棧頂,是否為空 棧的底層我們使用陣列來儲存資料 int elements public stacktest1 壓棧 壓入元素 publ...
資料結構與演算法《棧》
概念 棧 stack 又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使...
棧(資料結構與演算法)
給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true示例 2 輸入 輸出 true示例 3 輸入 輸出 false示例 4 輸入 輸出 false示例 5 輸入 輸出 tr...