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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值