最近在回顧一些基礎知識,在目前枝繁葉茂的前端中把基礎知識弄紮實。基礎紮實了上層建築才能牢固。這是一些筆記,雖然是一些簡單的東西,但還是拿出來與大家分享一下。養成一種分享的習慣。有什麼寫的不對的地方,請直接指出。
列表
列表是一組有序的資料。每個列表中的資料項稱為元素。在JavaScript中,列表中的元素可以是任意資料型別。
場景
當列表中儲存的元素不多時;不需要很長的序列中查詢元素;不需要對齊進行排序。
如果資料結構非常複雜,列表的作用就沒那麼大了。例如人們經常使用的待辦事項列表、購物清單、流行榜單等就很合適使用。
實現簡單的列表類
/**
* List
* @constructor
*/
function List() {
// 初始化資料
this.data = [];
// 新增
this.add = function (item){};
// 刪除
this.remove = function (id){};
// 查詢
this.find = function (id){};
// 清空
this.clear = function () {};
// 獲取列表資料
this.getData = function (){};
}
var ins = new List();複製程式碼
棧
棧是一種特殊的列表,棧內的元素只能通過一端訪問,這一端稱為棧頂。棧是後入先出的資料結構。
由於棧具有後入先出的特點,所以任何不在棧頂的元素都無法訪問。為了得到棧頂的元素,必須先去掉上面的元素。
棧的JS實現
function Stack() {
this.dataStore = [];
this.top = 0; //棧頂
this.push = push; // 入棧
this.pop = pop; // 出棧並刪除
this.peek = peek; // 出棧單不刪除
this.clear = clear;
this.getLength = getLength;
}
function push(el) {
this.dataStore[this.top++] = el;
}
function pop() {
return this.dataStore[--this.top];
}
function peek() {
return this.dataStore[this.top-1];
}
function clear() {
this.top = 0;
}
function getLength() {
return this.top;
}
var ins = new Stack();
ins.push('a');
ins.push('b');
ins.push('c');複製程式碼
舉2個棧實際應用的栗子
- 數制間的相互轉換
function mulBase(num, base) {
var s = new Stack();
do {
s.push(num % base);
num = Math.floor(num /= base);
} while (num > 0);
var converted = "";
while (s.getLength() > 0) {
converted += s.pop();
}
return converted;
}
console.log(mulBase(25,2));// 11001複製程式碼
- 迴文判斷
迴文:一個單詞、短語或者數字,從前往後寫都是一樣的。例如 abba 倒過來還是abba
function isPalindrome(word) {
var stack = new Stack(),
i = 0,
l = word.length;
for (; i < l; i++) {
stack.push(word.charAt(i))
}
var rword = "";
while (stack.getLength() > 0) {
rword += stack.pop();
}
return rword === word;
}
console.log(isPalindrome("rar")) //true
console.log(isPalindrome("test"))//false複製程式碼
佇列
佇列是一種列表,不同的是佇列只能在隊尾插入元素,在對首刪除元素。佇列用於儲存按順序排列的資料,先進先出。佇列應用比較廣泛,提交作業系統執行一些程式,列印任務池,日常排隊買東西等等。
佇列的JS實現
function Queue() {
this.dataStore = [];
this.enqueue = enqueue;
this.dequeue = dequeue;
this.front = front;
this.back = back;
this.toString = toString;
this.empty = empty;
}
function enqueue(element) {
this.dataStore.push(element)
}
function dequeue() {
this.dataStore.shift()
}
function front() {
return this.dataStore[0];
}
function back() {
return this.dataStore[this.dataStore.length - 1];
}
function toString() {
var str = '',
i = 0,
l = this.dataStore.length;
for ( ; i < l; i++) {
str += this.dataStore[i] + "\n";
}
return str;
}
function empty() {
return this.dataStore.length === 0;
}
// 例項化
var q = new Queue();
q..enqueue('a');複製程式碼