開篇語
未來將會結合《學習 JavaScript 資料結構和演算法》這本書寫一系列的演算法筆記。
之所以想要深入學習演算法的原因,是前段時間阿里的校招讓我打擊很大,自信心受到了強烈的衝擊。但好在我是一個從來不怕低谷的人,也十分慶幸在很早的時間點裡受到遲早該受到的挫折。
逝者如斯,故不捨晝夜。
棧
棧資料結構
棧是一種遵循後進先出( LIFO )原理的有序集合。新添的或待刪除的元素都儲存在棧的同一段,稱作棧頂,另一端就叫棧底。在棧裡,新元素都靠近棧頂,舊元素都接近棧底。
JavaScript 裡的 Stack 類
建立一個 Stack 類的建構函式
function Stack(){
// 各種屬性和方法的宣告
}
複製程式碼
需要一種資料結構來儲存棧裡的元素
function Stack(){
let items = [];
// 各種屬性和方法的宣告
}
複製程式碼
向棧裡新增元素
新增一個 push 方法
function Stack(){
let items = [];
this.push = function(item){
items.push(item);
}
}
複製程式碼
從棧裡刪除元素
新增一個 pop 方法
function Stack(){
let items = [];
this.push = function(item){
items.push(item);
}
this.pop = function(item){
items.pop(item);
}
}
複製程式碼
檢視棧頂元素
新增一個 peek 方法
function Stack(){
let items = [];
this.push = function(item){
items.push(item);
}
this.pop = function(item){
items.pop(item);
}
this.peek = function(){
return items[items.length - 1];
}
}
複製程式碼
檢查棧是否為空
新增一個 isEmpty 方法
function Stack(){
let items = [];
this.push = function(item){
items.push(item);
}
this.pop = function(item){
items.pop(item);
}
this.peek = function(){
return items[items.length - 1];
}
this.isEmpty = function(){
return items.length == 0;
}
}
複製程式碼
清空棧的內容
新增一個 clear 方法
function Stack(){
let items = [];
this.push = function(item){
items.push(item);
}
this.pop = function(item){
items.pop(item);
}
this.peek = function(){
return items[items.length - 1];
}
this.isEmpty = function(){
return items.length == 0;
}
this.clear = function(){
items = [];
}
}
複製程式碼
列印棧的內容
新增一個 print 方法
function Stack(){
let items = [];
this.push = function(item){
items.push(item);
}
this.pop = function(item){
items.pop(item);
}
this.peek = function(){
return items[items.length - 1];
}
this.isEmpty = function(){
return items.length == 0;
}
this.clear = function(){
items = [];
}
this.print = function(){
console.log(items.toString());
}
}
複製程式碼
輸出棧的元素數量
新增一個 size 方法
function Stack(){
let items = [];
this.push = function(item){
items.push(item);
}
this.pop = function(item){
items.pop(item);
}
this.peek = function(){
return items[items.length - 1];
}
this.isEmpty = function(){
return items.length == 0;
}
this.clear = function(){
items = [];
}
this.print = function(){
console.log(items.toString());
}
this.size = function(){
console.log(items.length);
}
}
複製程式碼
使用 Stack 類
function Stack(){
let items = [];
this.push = function(item){
items.push(item);
}
this.pop = function(item){
items.pop(item);
}
this.peek = function(){
return items[items.length - 1];
}
this.isEmpty = function(){
return items.length == 0;
}
this.clear = function(){
items = [];
}
this.print = function(){
console.log(items.toString());
}
this.size = function(){
console.log(items.length);
}
}
let stack = new Stack();
stack.push('one');
stack.print(); // one
stack.size(); // 1
console.log(stack.peek()); // one
複製程式碼