JS 實現入棧出棧

2021-09-14 01:25:05 字數 1566 閱讀 5345

棧是一種遵循後進先出(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還...