JS的基本数据结构实现---线性表

1.顺序存储结构
利于存取,不利于插入删除








结果

var sqList=[],
insert=document.getElementById(‘insert’),
result=document.getElementById(‘result’),
getBtn=document.getElementById(‘get’),
delBtn=document.getElementById(‘del’);

>function insertItem(name,sex,i){ //插入
>var obj={};
>obj.name=this.name;
>obj.sex=this.sex;
>if(i<0||i>sqList.length){
>result.innerHTML="it's illegal"+i+"
"
>} >else{ >for(var j=sqList.length-1;j>i;j++){ >sqList[j+1]}=sqList[j]; >} >sqList[i]=obj; >}
function deleteItem(index){//删除
    if(sqList.length==0){
        result.innerHTML="sqList is null";
    }
    if(index<0||index>sqList.length-1){
        result.innerHTML="index is illegal";
    }else if(indexlength-1){
        for(var k=index;klength-1;k++){
            sqList[k]=sqList[k+1];
        }
        sqList.length--;
    }
    return sqList;
}

2.链式存储结构
整个链表是靠指针链接起来的。这就避免了内存浪费或溢出,但是对于获取某个元素却比顺序结构要麻烦

var LinkNode=function(data,next){//定义单链表
    this.data=data;
    this.next=next;
}
//单链表初始化
function createLink(){
    var list=new LinkNode(0,null);
    return list;
//这个空链表拥有一个头结点,头结点的数据域data存储的不是真的数据,而是该链表长度,同时,当链表为空的时候,头结点的next指针域是null的

function insertLink(list,i,data){ //插入一个节点
    var obj=list;
    var j=1;
    while(obj&&jif(!obj||i<1){
        return error;
    }
    var sNode = new LinkNode(data,obj.next);
    obj.next = sNode;
    list.data+=1;

}
}
//首先找到插入位置的链表指针指向哪里,再把要插入元素的指针指向这里,把上一个元素的指针指向插入元素的位置,数据长度加一

function deleteItem(list,i){
    var obj=list;
    var j=1;
    while(obj&&jvar item=obj.next;
    obj=item.next;
    item=null;
    list.data-=1;
    return list;
    //同时为了让GC尽快回收被删除元素占用的空间,这里让其item=null(在C语言中可以 采用free函数,在js中设为null会让浏览器尽快通过引用计数或标记删除策略通知GC回收空间)。
}

你可能感兴趣的:(JS的基本数据结构实现---线性表)