標籤:map 有序 fun 字串 div 出棧 存在 遍曆 log
正在學習資料結構,學的是C語言版的,把裡面的例子用Javascript重寫了一遍,如果有什麼錯誤的話歡迎提出(持續更新)。
一、線性表
- 一般線性表合并:
1 function addList(la,lb){ 2 var arrA=[],arrB=[]; //聲明兩個線性表 3 4 //擷取輸入值 5 arrA=la.value.split(‘,‘).map(function(item){return parseInt(item);}); 6 arrB=lb.value.split(‘,‘).map(function(item){return parseInt(item);}); 7 8 for(let i=0;i<arrB.length;i++){//取arrB中的第i個數字與arrA比較 9 for(var j=0;j<arrA.length;j++){10 if(arrB[i]==arrA[j]){11 break;12 }13 }14 if(j==arrA.length){//如果arrA中不存在arrB[i]將arrB[i]插入arrA中15 arrA.push(arrB[i]);16 17 }18 }19 20 return arrA.join(‘,‘);21 }
2.有序線性表合并:
1 function merge(la,lb){ 2 var arrA=la.value.split(‘,‘).map(function(item){return parseInt(item);}); 3 var arrB=lb.value.split(‘,‘).map(function(item){return parseInt(item);}); 4 var arrC=[],i=0,j=0;//arrC為合并後數組 5 while((i<arrA.length)&&(j<arrB.length)){//當其中一個表遍曆完則跳出迴圈 6 7 if(arrA[i]<=arrB[j]){//依次摘取兩表中較小的數插入到arrC中 8 9 arrC.push(arrA[i]);10 i++;11 }else{12 console.log(‘b‘)13 arrC.push(arrB[j]);14 j++;15 }16 }17 18 while(i<arrA.length){//arrB已遍曆完,將arrA剩下的依次插入到arrC中19 arrC.push(arrA[i]);20 i++;21 }22 while(j<arrB.length){//arrA已遍曆完,將arrB剩下的依次插入到arrC中23 arrC.push(arrB[j]);24 j++;25 }26 return arrC.join(‘,‘);27 }
二、棧和隊列:
1.數制轉換:
function transform(n,d){//輸入十進位數n和需要轉換的進位d var stack=[];//聲明一個數組類比棧 while(n){ //每次將n%d入棧,再將n替換成n/d var m; if(d===16){//如果是16進位進行匹配 switch(n%d){ case 10:m=‘a‘;break; case 11:m=‘b‘;break; case 12:m=‘c‘;break; case 13:m=‘d‘;break; case 14:m=‘e‘;break; case 15:m=‘f‘;break; default:m=n%d;break; } }else{ m=n%d; } stack.push(m); n=Math.floor(n/d); //javascript中‘/’為除法運算,並非取整 } return stack.reverse().join(‘‘); }
2.括弧匹配:
1 function check(str){//傳入需要檢測的字串 2 var flag=1,stack=[]; 3 4 for(var i=0;i<str.length;i++){遍曆字串,檢測每一個字元 5 6 switch(str[i]){ 7 case ‘[‘: 8 case ‘(‘: 9 case ‘{‘:stack.push(str[i]);break;//如果是[、(、{則入棧10 //如果是]、)、}中的任意一個則判斷棧頂元素是否與之匹配11 //如果匹配則將棧頂元素出棧,否則報錯,將flag設為012 case ‘)‘:if(stack[stack.length-1]==‘(‘){13 14 stack.pop();15 break;16 }else{17 flag=0;18 break;19 };20 case ‘]‘:if(stack[stack.length-1]==‘[‘){ //如果不於棧頂元素相匹配則錯誤21 stack.pop();22 break;23 }else{24 flag=0;25 break;26 };27 case ‘}‘:if(stack[stack.length-1]==‘{‘){28 stack.pop();29 break;30 }else{31 flag=0;32 break;33 }34 }35 36 if(!flag){break;};37 }38 39 return flag;40 }
資料結構(Javascript版)