前言
昨天学习了线性表并且学习了使用javascript的方式实现。今天仔细阅读课本之后发现昨天单向链表的部分缺少一些内容。今天先补上这部分内容。ps:昨天的目录结构有点像了…
链表(1)
链表作为一种数据结构,实现之后是要能够根据实际情况进行设计包含方法的。上一篇中做到了简单的增删查改功能,今天需要增加几项特殊的功能。
1. 按照索引查找结点
List.prototype = {
getElementByIndex:function(index){
var curNode = this.head;
for(var i = 0; i<index;i++){
curNode = curNode.next;
}
return curNode.element;
},
}
2. 返回线性表长度
ListLengh:function(){
var curNode = this.head;
var i = 0 ;
while(curNode.next !== null){
curNode = curNode.next;
i++;
}
return i;
},
3. 归并链表(一)
mergeListToA:function(La,Lb){
var La_len = La.ListLengh();
var Lb_len = Lb.ListLengh();
for(var i = 1 ;i<=La_len;i++){
var item = Lb.getElementByindex(i);
if(La.getElementByindex(i) !== item){
var oldItem =La.getElementByindex(i);
La.insert(item,oldItem);
}
}
return La;
},
4. 归并链表(二)
mergeListToC:function(La,Lb,Lc){
var Lc = new List();
var i = 1;
var j = 1;
var k = 0;
var La_len = La.ListLengh();
var Lb_len = Lb.ListLengh();
while((i <= La_len) && (j <= Lb_len)){
var ai = La.getElementByindex(i);
var bj = Lb.getElementByindex(j);
if(ai<=bj){
var c_item = Lc.getElementByindex(k);
k++;
Lc.insert(ai,c_item);
i++;
}else{
var c_item = Lc.getElementByindex(k);
k++;
Lc.insert(bj,c_item);
j++;
}
}
while(i<=La_len){
var ai = La.getElementByindex(i);
i++;
var c_item = Lc.getElementByindex(k);
k++;
Lc.insert(ai,c_item);
}
while(j<=Lb_len){
var bj = Lb.getElementByindex(j);
j++;
var c_item = Lc.getElementByindex(k);
k++;
Lc.insert(bj,c_item);
}
return Lc;
},
后记
今天学习了单向链表,明天准备学习循环链表