什么是數(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)