文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>线性链表--哨兵节点

线性链表--哨兵节点

时间:2010-11-13  来源:liurhyme

   哨兵(sentinel)是一个哑对象,可以简化边界条件。是一个附加的链表节点,该节点作为第一个节点,但是它其实并不存储任何东西,只是为了操作的方便而引入的。因此,如果一个链表有哨兵节点的话,那么线性表的第一个元素应该是链表的第二个节点(个位置的时候,需要考虑该位置上原来的节点并没有前驱节点;而如果有哨兵节点的话, 线性表的每个位置的节点都有前驱节点,因此可以统一处理。(注意:哨兵节点根本不出现在线性表中,所以虽然它没有前驱,但是前面的那句话并不矛盾)。


              带哨兵节点的双链表     
  1. package com.eshore.sweetop.dataframe;

  2. public class DoubleLinkedList {
  3.     private Element nil;
  4.     
  5.     public DoubleLinkedList() {
  6.         nil=new Element(null);
  7.         nil.pre=nil;
  8.         nil.next=nil;
  9.     }
  10.     
  11.     public void insert(Object o){
  12.         Element e=new Element(o);
  13.         e.next=nil.next;
  14.         nil.next.pre=e;
  15.         nil.next=e;
  16.         e.pre=nil;
  17.     }
  18.     
  19.     public Element search(Object o){
  20.         Element e=nil.next;
  21.         while(e!=nil&&e.key!=o){
  22.             e=nil.next;
  23.         }
  24.         return e;
  25.     }
  26.     
  27.     public void delete(Object o){
  28.         Element e=search(o);
  29.         e.pre.next=e.next;
  30.         e.next.pre=e.pre;
  31.     }
  32.     
  33.     public class Element{
  34.         private Element pre;
  35.         private Element next;
  36.         public Object key;
  37.         
  38.         public Element(Object x){
  39.             this.key=x;
  40.         }
  41.     }
  42.     
  43.     public static void main(String[] args) {
  44.         DoubleLinkedList dll=new DoubleLinkedList();
  45.         dll.insert(Integer.valueOf(1));
  46.         System.out.println(dll.search(Integer.valueOf(1)).key);
  47.         dll.delete(Integer.valueOf(1));
  48.     }
  49. }

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载