棧是一種遵循後進先出(lifo)原則的有序集合。新新增的或者待刪除的元素都儲存在棧的尾部(即棧頂),另一端叫棧底。在棧裡,新元素都靠近棧頂,舊元素都接近棧底。
方法一是建立乙個stack類來表示棧。具體**如下:
function stack() ;
// 移除棧頂的元素,同時返回被移除的元素
this.pop = function() ;
// 返回棧頂的元素,不對棧做任何修改
this.peek = function() ;
// 判斷棧裡使是否還有元素
this.isempty = function() ;
// 移除棧裡所有的元素
this.clear = function() ;
// 返回棧裡的元素個數
this.size = function() ;
this.print = function() ;
}var stack = new stack();
console.log(stack.isempty());
stack.push(1);
stack.push(8);
console.log(stack.peek());
stack.push(10);
console.log(stack.peek());
console.log(stack.size());
console.log(stack.isempty());
console.log(14)
stack.pop();
stack.pop();
stack.print();
另一種方式就是通過push將元素推入棧頂,然後遍歷棧裡的內容,刪除棧頂元素,因為在棧頂元素被刪除的時候,陣列的長度是一直在變化的,所以要先將陣列的長度賦值給len,來確保每次刪除的是棧頂元素
function stack2 ()
console.log("arr內容:" + arr)
var len = arr.length
for(let i = 0; i < len; i++)
}stack2()
棧的實際應用之一就是實現十進位制轉化為任意進製
以十進位制轉化為二進位制為例:要把十進位制轉化成二進位制,我們可以將十進位制數字和2整除(二進位制是蠻二進一),直到結果是0為止。其轉化過程大致如下:
// 將十進位制轉為任意進製
function baseconerter(decnumber, base)
while (!remstack.isempty())
console.log('basestring:' + basestring)
return basestring
}baseconerter(223411, 2) // 110110100010110011
baseconerter(223411, 8) // 664263
baseconerter(223411, 16) // 368b3
棧的入棧,出棧,顯示入棧元素
要實現的功能如下 printf t t1.入棧 n printf t t2.出棧 n printf t t3.顯示棧內元素 n define maxsize 5 巨集定義 typedef struct stack 定義棧 void push stack p,int e void printstack...
由入棧 出棧序列求所有出棧 入棧序列
給出乙個陣列,代表入棧順序,求所有出棧可能性?給出乙個陣列,代表出棧順序,求所有入棧可能性?這兩題解法相同,可利用全排列求出所有組合,再進行可能性分析。全排列 如下 public list permute int nums 這種方法是什麼意思呢?例如abc,在第0位有三種可能,axx,bxx,cxx...
入棧和出棧問題
首先要知道對n個元素入棧,其出棧順序共有多少種情況?這個結果是 2n n 1 n n 即如果有3個元素,那麼出棧的順序共有5中情況。a b c 的順序入棧,那麼出棧情況如下 1 abc 2 bac 3 bca 4 cba 5 acb 出棧問題歸根到底為 先入後出原則。如果第乙個出棧的為a,那麼bc還...