当前位置: 首页 > 图文教程 > 网络编程 > Javascript > 双向链表&&堆栈

Javascript
Prototype ObjectRange对象学习
Prototype Number对象 学习
Prototype Enumerable对象 学习
Prototype Template对象 学习
Prototype PeriodicalExecuter对象 学习
Prototype Array对象 学习
Prototype Hash对象 学习
[原创]IE view-source 无法查看看源码 JavaScript看网页源码
js计算页面刷新的次数
一个cssQuery对象 javascript脚本实现代码
一个可以随意添加多个序列的tag函数
javascript 三级下拉选择菜单Levels对象
JavaScript 进度条实现代码(Firefox等相似浏览器下不支持)
javascript 表单规则集合对象
从基础开始建立一个JS代码库
javascript Base类 包含基本的方法
js 代码集(学习js的朋友可以看下)
模仿jQuery each函数的链式调用
JavaScript 就地编辑HTML节点实现代码
JavaScript 动态生成方法的例子

Javascript 中的 双向链表&&堆栈


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-10   浏览: 249 ::
收藏到网摘: n/a


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