數(shù)據(jù)結(jié)構(gòu)筆記

什么是數(shù)據(jù)結(jié)構(gòu)
跟語言無關(guān),跟實(shí)現(xiàn)無關(guān)

舉例:

隊(duì)列、棧、Hash(表)、樹

隊(duì)列(queue):先進(jìn)先出(FIFO)

例:
取號(hào)

<button id=takeNumber>取號(hào)</button>
<div id="output"></div>
<div id="screenDiv"></div>

var queue = []

function 取號(hào) (name){
    let number = Math.round(Math.random() * 10000)
    queue.push(number)
    //output.textContent = 你取的號(hào)碼是${number},
    //你前面有 ${queue.length -1}個(gè)人
    return number
}
function 取號(hào)(){
    //if(queue.length === 0){
    return
    }
    let theNumber = queue.shift()
    screenDiv.textContent = '請(qǐng) ${theNumber} 到服務(wù)臺(tái)'
    retun theNumber
}

//takeNumber.onclick = function(){
    取號(hào)()
}
//setInterval(function(){
    叫號(hào)()
},3000)

棧(stack):先進(jìn)后出

<button id=button1>放書</button>
<button id=button2>取書</button>
<div id="output"></div>
<div id="screenDiv"></div>

var 箱子 = []

function 放書(name){
    箱子.push(name)
    output.textContent = name + '已放入箱子'
    return
}

function 取書(){
    if( 箱子.length === 0)
    output.textContent = '沒書'
    return
}
var theBook = 箱子.pop()
    output.textContent = theBook + '已取出'
    return theBook
}

button1.onclick = function(){
    放書(Math.random())
}
button2.onclick = function(){
    取書()
}

Hash 哈希(表)

給我一個(gè)東西我給你另外一個(gè)東西

(1)用Hash找出字母出現(xiàn)的次數(shù)(已知參數(shù)的情況下)

var string = "I am Frank,I am 18 years old"

var hash = {}

for(var i = 0;i<string.length;i++){
    var letter = string[i]
    if(letter in hash){
        hash[letter] += 1
    }else{
        hash[letter] = 1
    }
}

console.log(hash)

用Hash找出字母出現(xiàn)的次數(shù)(不知參數(shù)的情況下)

function sort(string){
var str={};
for(var i=0;i<string.length;i++){
    if(string[i] in str){
    str[string[i]]+=1;
    }else{
    str[string[i]]=1;
    }
}
return str;
}
console.log(sort("hello"));

(2)排序(桶排序)已知參數(shù)

var array = [2,11,3,12,4,5,12]

var hash = []//每個(gè)數(shù)字出現(xiàn)幾次
//寫hash
for(var i = 0; i<array.length; i++){
    var number = array[i]
    if(number in hash){
        hash[number]+= 1
    }else{
    hash[number] = 1
    }
}

//讀hash

var result = []
for(var i=0;i<hash.length; i++){
    if(hash[i] !== undefined){
        for(var iCount = 0; iCount < hash[i]; iCount ++){
            result.push(i)
        }
    }
}
console.log(result)

排序(桶排序)不知參數(shù)

function bucketsort(array){
    var buckets=[];
    var result = [];
    for(var i=0;i<array.length;i++){
        if([array[i]] in buckets){
            buckets[array[i]]+=1;
        }else{
            buckets[array[i]]=1;
        }
    }
    for(var a=0;a<buckets.length; a++){
        if(buckets[a] !== undefined){
            for(var Count = 0; Count < buckets[a]; Count ++){
                result.push(a);
            }
        }
    }
        return result;
}
console.log(bucketsort([21,15,19,35,62,0,1]));

樹:

添加生物

var root = {
    name:'生物',
    children:[]
}

function addChild(parent,child){
    parent.children.push(child)
}
addChild(root,{
    name:'動(dòng)物',
    children:[]
})

addChild(root,{
    name:'植物',
    children:[]
})

addChild(root.children[0],{
    name:'哺乳動(dòng)物',
    children:[]
})
addChild(root.children[0],{
    name:'爬行動(dòng)物',
    children:[]
})
addChild(root.children[0],{
    name:'兩棲動(dòng)物',
    children:[]
})
addChild(root.children[1],{
    name:'花草',
    children:[]
})
addChild(root.children[1],{
    name:'樹木',
    children:[]
})

console.log(root)

遍歷

function travelTree(node){
    console.log(node.name)
    for(var i= 0; i<node.children.length; i++){
        travelTree(node.children[i])
    }
}
travelTree(root)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容