/*--------------双向链表&&堆栈--------------*/
function linklist(){
var olist,olength,oresult;
this.append = dlistappend;
this.length = dlistlength;
this.getat = dlistgetat;
this.setat = dlistsetat;
this.deleteat = dlistdeleteat;
this.insertat = dlistinsertat;
this.gethead = dlistgethead;
this.gettail = dlistgettail;
this.clearall = dinitlinklist;
this.version = dlistversion;
this.push
this.pop
dinitlinklist();
}
function linklistdata(){
this.data = null;
this.next = null;
this.prev = null;
}
function dlistversion(bbool){
if(bbool){
alert(olist.data);
}
return olist.data;
}
function dinitlinklist(){
var ver = "双向链表1.0版\n\n作者:卢印刚\n\n2002.9.3\n\n版权所有"
olist = new linklistdata();
olist.data = ver;
olist.prev = olist;
olist.next = olist;
olength = -1;
}
function dlistappend(m){
var temp = olist.prev;
temp.next = new linklistdata();
temp.next.data = m;
temp.next.prev = temp;
temp.next.next = olist;
olist.prev = temp.next;
olength += 1;
oresult = m;
return oresult;
}
function dlistlength(){
return olength;
}
function dlistgethead(){
return olist.next.data;
}
function dlistgettail(){
return olist.prev.data;
}
function dlistgetposition(d,i){
var pos = 0;
if(i<olength/2){
while(pos<=i){
d = d.next;
pos+=1;
}
return d;
}else{
pos = olength;
while(pos>=i){
d = d.prev;
pos-=1;
}
return d;
}
}
function dlistgetat(i){
if(i>olength){
i=olength;
}
var temp = olist;
temp = dlistgetposition(temp,i);
oresult = temp.data;
return oresult;
}
function dlistsetat(i,m){
if(i>olength){
i=olength;
}
var temp = olist;
temp = dlistgetposition(temp,i);
temp.data = m;
oresult = temp.data;
return oresult;
}
function dlistdeleteat(i){
if(i>olength){
i=olength;
}
var temp = olist;
temp = dlistgetposition(temp,i);
temp.prev.next = temp.next;
oresult = temp.data;
delete temp;
olength-=1;
return oresult;
}
function dlistinsertat(i,m){
if(i>olength){
i=olength;
}
var temp = olist;
temp = dlistgetposition(temp,i-1);
var d = new linklistdata();
d.data = m;
d.prev = temp;
d.next = temp.next;
temp.next.prev = d;
temp.next = d;
olength+=1;
oresult = m;
return oresult;
}
/*--------------双向链表&&堆栈--------------*/
/*------------------应用--------------------*/
var list = new linklist();
var temp = new array("king","love","you","me","hello");
for(var i=0;i<temp.length;i++){
list.append(temp[i]);
}
list.insertat(2,"fuck");
alert(list.getat(2))
list.deleteat(2)
alert(list.getat(2))