java数据结构之单链表的简单实现

      今年学校开了数据结构的课(C语言版的),但作为已经学习了Java有半年之久且一直想做Java开发人员的小菜逼的我却想搞一下Java数据结构,简单的来说就是用面相对象的思想来实现数据结构的设计。刚好今天气大好闲着没事干,于是便写了这篇关于Java单链表的实现总结与大家分享:

     我们要描述一个完全的表DAT(单链表,对我们要操作的一个子集而言),首先,我们要完成3个单独的类来实现我们的预期目标: 用单链表抽象数据类型来实现最简单的表的添加数据和删除数据项即为: SingleLinkedList(表本身类),Node(表节点类),LinkedListItr(位置类),下来用一个单链表列子的实现来做一总结吧:

     /*作为实例测试,数据域的数据类型用int 基本类型,如果想设计一种可以当做包类使用的惯用程序,我们可以将数据域的数据类型定义为Object类型的,因为这样我们可以向上转型为我们想要入表的数据类型,这在Java中是完全可以实现的*/

      public  class    Node{

                  int data;    //数据域--》节点存储的值
                  Node node_next;  //伪指针,--》即:指向下一个数据单元的next链
                 //存储结构的设计,Node构造函数
                  public Node(int data){
                         this.data=data;
                        node_next=null;
                   }
                 //设置节点的下一个节点
                  public void setNode_next(Node val_node){
                          node_next=val_node;
                   }
                  //获取下一个节点
                  public Node getNode_next(){
                          return node_next;
                  }
                //输出节点的数据
                 public  void printNode(){
                        System.out.println(this.data);
                  }

      }

/*下来我们要设计用于储存现在节点称为现在的节点类,即枚举器类,他引用当前节点单元的Node类型的一个对象(current),用于我们更好的实现查找和删除链表中的某个元素,要理解我们对于当前元素单元的操作只是对它的操作引用,这类似与c语言中指针的作用*/

 public class LinkedListItr {
 LinkedListItr(Node theNode){
         current=theNode;
 }
 //判断是否以索引到表未
 public boolean isPastEnd(){
        return current==null;
 }
 //获取当前位置的元素的值
 public int retrieve(){
        return isPastEnd() ? null:current.data;
 }
 //行链表的下一个单元前进
 public void advance(){
         if(!isPastEnd())
                  current=current.node_next;
  }
 Node   current;    //用于存储当前节点的Node类的对象
}



/*下来对表进行总体的操作实现,此处实现了0~9,10个数字的入表和弹出表,并对其中的某些元素进行删除,在这个ADT中我们把每个数据单元都视为一个链表类的对象进行操作,从而我们将各个数据单元逻辑的关联起来,来实现一些对链表的简单操作*/

public class SingleLinkedList {
 private Node pointer_head,pointer_tail; //链表的头引用和尾引用,在如C++,C的语言环境中可称为指针
 int tt;
 Object t=tt;
 // SingleLinkedList constructors
 public SingleLinkedList(){
  this.pointer_head=null;
  this.pointer_tail=null;
 }
 //判断表是否为空
 public boolean isEmpty(){
  return pointer_head==null;
 }
 //为链表增加节点
 public void addNode(int val_data){
  if(isEmpty()){  //表为空时为即将新的节点指向头节点和尾节点的引用
   pointer_head=pointer_tail=new Node(val_data);
  }else{
   //用链表将各个数据单元关联起来
   pointer_tail.setNode_next(new  Node(val_data));
   pointer_tail=pointer_tail.getNode_next();
  }
 }
 //remove一个元素单元
 public LinkedListItr findPrevious(int x){
  Node itr=pointer_head;
  while(itr.node_next!=null&&itr.node_next.data!=x)
   itr=itr.node_next;
    return new LinkedListItr(itr);
 }
 public void remove(int x){
  LinkedListItr p=findPrevious(x);
  if(p.current.node_next!=null)
   p.current.node_next=p.current.node_next.getNode_next();
 }
 //输出链表
 public void printListNode(){
  for(Node temp=pointer_head;temp!=null;temp=temp.getNode_next()){
   temp.printNode();
  }
 }
 public static void main(String [] args){
  SingleLinkedList singleLinkedList=new SingleLinkedList();
  for(int vi=0;vi<10;vi++)
   singleLinkedList.addNode(vi);
  System.out.println("output  SingleLinkedList: ");
   singleLinkedList.printListNode();
  System.out.println("delet:");
   singleLinkedList.remove(7);
   singleLinkedList.printListNode();
 }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值