堆棧數據結構的實現:
在編程方式上面採用了面向對象編程裏面的組合使用構造函數模式和原型模式;
實現原理:這裏就不闡述堆棧的基本概念了,學c語言數據結構的時候都學過吧,這裏主要紀錄一下用js實現的原理;c語言用結構體去實現,在js語言中用面向對象就十分方便了;
- 用dataStore存儲數據;
- 用top表示棧頂位置,它的值也等於棧的長度;
- 出棧和入棧方法分別是pop和push;
- show()方法返回某一個位置的值 -
function Stack(){
//存放數據
this.dataStore = [];
// 紀錄棧頂的位置
this.top = 0;
}
Stack.prototype = {
// 出棧
push: function(value){
this.dataStore[this.top ++] = value;
},
// 入棧
pop: function(){
if (this.top > 0){
return this.dataStore[-- this.top];
} else {
alert("親:已經到棧頂了,不能彈出棧了");
}
},
// 數組長度
length: function(){
return this.top;
},
// 展示當前位置的值
show: function(index){
if (index <= this.top && index > 0){
return this.dataStore[index - 1];
} else {
alert("警告:請求輸出的值超出棧頂或者小於0");
}
}
}
堆棧實現進制轉換
實現原理:
step1: 新建一個堆棧
step2:把值除基數的餘數壓入棧
step3:更新number值爲Math.floor(number / base)
step4:挨個出棧,拼接成字符串形式
代碼:
function convert(number, base){
var stack2 = new Stack();
while (number > 0){
stack2.push(number % base);
number = Math.floor(number / base);
}
var length = stack2.top;
var str = '';
for (var i = 0; i < length; i++){
str += stack2.pop();
}
return str
}
利用堆棧判斷迴文
思路:
step1:將字符串順序遍歷壓進堆棧
step2:將堆棧依次壓出
代碼:
function isPalindrome(str){
var stack = new Stack();
var newStr = '';
for (var i = 0; i < str1.length; i++){
stack.push(str1[i]);
}
var length = stack.top;
for (var i = 0; i < length; i++){
newStr += stack.pop();
}
return newStr === str;
}