演算法和資料結構在JS中的運用(三)
佇列(Queue)
- 特點:先進先出(FIFO)
- 舉例
/*
*適用於餐廳取號
**/
const queue = [];
let num = 0;
push= () => {
num += 1;
queue.push.call(queue,num);
}
pop = () => {
const n = queue.shift.call(queue); // 等價於 queue.shift()
// if n === undefined 沒處理
if(n === undefined){
return;
}
};
棧(Stack)
- 特點:先進後出(LIFO)
- 舉例
stack = () => {
let items = [];
this.push = (element) => {
items.push(element);
}
this.pop = () => {
return items.pop();
}
this.peek = () => {
return items[items - 1];
}
this.empty = () => {
return items.length === 0;
}
this.size = () => {
return items.length;
}
this.clear = () => {
items = [];
}
this.print = () => {
console.log(items.toString());
}
}
連結串列(linked-list)
const createList = value => {
return createNode(value);
}
const appendList = (list,value) => {
const node = createNode(value);
let x = list;
while(x.next){
x = x.next;
}
x.next = node;
return node;
}
const removeFromList = (list,node) => {
let x = list;
let p = node;
while(x !== node && x !== null){
p = x;
x = x.next;
}
if( x === null ) return false;
else if(x === p){
p = x.next;
return p;
}else{
p.next = x.next;
return list;
}
}
const createNode = value => {
return {
data: value,
next: null
};
};
const travelList = (list,fn) => {
let x = list;
while( x !== null){
fn(x);
x = x.next;
}
}
const list = createList(10);
const node2 = appendList(list,20);
const node3 = appendList(list,30);
const node4 = appendList(list,40);
travelList(list,node => {
console.log(node.data);
});
樹(tree)
- 舉例
/*
*適用於中國的省市區
*公司的組織架構
*網頁中的節點
**/
const createTree = value => {
return {
data: value,
children: null,
parent: null
}
}
const addChild = (node,value) => {
const newNode = {
data: value,
children: null,
parent: node
};
node.children = node.children || [];
node.children.push(newNode);
return newNode;
}
const travel = (tree,fn) => {
fn(tree);
if(!tree.children){
return;
}else if(tree.children){
for(let i = 0; i < tree.children.length; i++){
const result = find(tree.children[i], node);
if(reuslt){
return result;
}
}
return undefined;
}else{
return undefined;
}
};
const removeNode = (tree,node) => {
const siblings = node.parent.children;
let index = 0;
for(let i = 1; i < siblings.length ; i++){
if (siblings[i] === node) {
index = i;
}
}
siblings.splice(index, 1);
}
const tree = createTree(10);
const node2 = addChild(tree, 20);
const node3 = addChild(tree, 30);
addChild(tree, 40);
const node5 = addChild(tree, 50);
addChild(node2, 201);
addChild(node2, 202);
addChild(node2, 203);
addChild(node2, 204);
console.log(tree);
const fn = node => {
console.log(node.data);
};
removeNode(tree, node5);
console.log(tree);
相關文章
- 演算法、資料結構、與設計模式等在遊戲開發中的運用 (三):插值(Interpolation)演算法資料結構設計模式遊戲開發
- js資料結構和演算法(9)-排序演算法JS資料結構演算法排序
- 對資料結構和演算法的總結和思考(三)--希爾排序資料結構演算法排序
- 演算法、資料結構、與設計模式等在遊戲開發中的運用 (四):佇列(Queue)演算法資料結構設計模式遊戲開發佇列
- 資料結構和演算法資料結構演算法
- Java的資料結構和演算法Java資料結構演算法
- JavaScript 的資料結構和演算法JavaScript資料結構演算法
- 雜湊資料結構以及在HashMap中的應用資料結構HashMap
- JS 中普通物件資料型別的基本結構和操作JS物件資料型別
- 從零開始學資料結構和演算法(三)棧與棧的應用資料結構演算法
- [面試專題]資料結構和演算法-JS之魂面試資料結構演算法JS
- 用Python解決資料結構與演算法問題(三):線性資料結構之棧Python資料結構演算法
- 【資料結構與演算法】位運算資料結構演算法
- 資料結構和演算法-堆資料結構演算法
- JavaScript資料結構和演算法JavaScript資料結構演算法
- 聊聊資料結構和演算法資料結構演算法
- python演算法與資料結構-演算法和資料結構介紹(31)Python演算法資料結構
- 資料結構和演算法總結--棧資料結構演算法
- JS版資料結構第三篇(連結串列)JS資料結構
- Java資料結構與排序演算法 (三)Java資料結構排序演算法
- 演算法、資料結構、與設計模式等在遊戲開發中的運用 (一):單例設計(Singleton Design)演算法資料結構設計模式遊戲開發單例
- 資料結構和演算法之-列表資料結構演算法
- 資料結構和演算法:遞迴資料結構演算法遞迴
- JavaScript 的資料結構和演算法 - 連結串列篇JavaScript資料結構演算法
- JavaScript 的資料結構和演算法 - 前言篇JavaScript資料結構演算法
- JavaScript 的資料結構和演算法 - 棧篇JavaScript資料結構演算法
- 【資料結構基礎應用】【查詢和排序演算法】資料結構排序演算法
- Android中需要了解的資料結構(三)Android資料結構
- 資料結構和演算法——棧的面試演算法資料結構演算法面試
- 資料結構和演算法的圖解和實現資料結構演算法圖解
- JS 裡的資料結構 - 棧JS資料結構
- js資料結構與演算法 陣列、棧部分JS資料結構演算法陣列
- 資料結構與演算法-資料結構(棧)資料結構演算法
- [資料結構]連結串列的實現在PHP中資料結構PHP
- [資料結構] 連結串列的實現在 PHP 中資料結構PHP
- 在資料結構與演算法中 傳值方式(C語言)資料結構演算法C語言
- js實現資料結構及演算法之排序演算法JS資料結構演算法排序
- 速度提高几百倍,記一次資料結構在實際工作中的運用資料結構