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

来源:互联网 发布:圣剑网络 总监 编辑:程序博客网 时间:2024/05/23 01:56

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

<input type="text" id="name" placeholder="姓名"/><label for="sex">性别</label><select  id="sex" >    <option value="male">男</option>    <option value="female">女</option></select><input type="text" placeholder="索引(从0开始)" id="index"></input><input type="button" value="插入" id="insert"></input><input type="button" value="获取" id="get"/><input type="button" value="删除" id="del"/><h3>结果</h3><p id="result"></p>

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+"<br>">}>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(index<sqList.length-1){        for(var k=index;k<sqList.length-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&&j<i){        j++;        obj=obj.next;    }    if(!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&&j<i){        j++;        obj=obj.next;    }    var item=obj.next;    obj=item.next;    item=null;    list.data-=1;    return list;    //同时为了让GC尽快回收被删除元素占用的空间,这里让其item=null(在C语言中可以 采用free函数,在js中设为null会让浏览器尽快通过引用计数或标记删除策略通知GC回收空间)。}
0 0