双向链表&&堆栈
/*--------------双向链表&&堆栈--------------*/
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))