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回收空间)。
}