Java自定义实现链队列详解
一、写在前面 数据结构中的队列应该是比较熟悉的了,就是先进先出,因为有序故得名队列,就如同排队嘛,在对尾插入新的节点,在对首删除节点.jdk集合框架也是提供也一个Queue的接口.这个接口代表一个队列.顺序队列:ArrayBlockingQueue,LinkedBlockingQueue.(上面两种是足色队列)还有一种是ConcurentLinkedQueue。 队列的常用的操作: 1:初始化 二、自定义的实现 源码展示的比较清楚,就不用再多做介绍 public class LinkedQueue<T>{ //自定义链队列--采用非静态内部类来表示链队列的数据节点 private class Node{ //表示链队列的数据节点 private T data; //指向下一个节点的引用 private Node next; @SuppressWarnings("unused") public Node(){ } public Node(T data,Node next){ this.data=data; this.next=next; } } //定义链队列的对首和对尾的引用 private Node front; private Node rear; //定义链栈的大小 private int size; //创建一个空的链对列 public LinkedQueue(){ front=null; rear=null; } //以确定的元素来创建一个链对列,只有一个节点的 public LinkedQueue(T element){ front=new Node(element,null); //指向同一个元素 rear=front; size++; } //返回链队列的大小 public int length(){ return size; } //返回链队列得对首的元素,不删除对首的元素 public T elementFront(){ if(!empty()){ return front.data; }else{ return null; } } //访问队列的最后一个元素 public T elementRear(){ if(!empty()){ return rear.data; }else{ return null; } } //返回当前的链对队列是否为空 public boolean empty(){ return size==0; } //清空一个链队列 public void clear(){ front=null; rear=null; size=0; } //插入链队列一个节点--对尾 public void add(T element){ //如果链对列为空,就新建一个节点 if(front==null){ rear=new Node(element,null); front=rear; }else{ //动态创建新节点 Node newRear=new Node(element,null); rear.next=newRear; rear=newRear; } size++; } //删除链队列一个节点,返回删除后的节点 public T remove(){ Node oldFront=front; front=front.next; oldFront.next=null; size--; return oldFront.data; } //返回队列 public String toString(){ //如果链队列为空链队列是 if(empty()){ return "[]"; }else{ StringBuilder sBuilder=new StringBuilder("["); for(Node current=front;current!=null;current=current.next){ sBuilder.append(current.data.toString()+","); } int len=sBuilder.length(); return sBuilder.delete(len-1,len).append("]").toString(); } } public static void main(String[] args) { LinkedQueue<String> lQueue=new LinkedQueue<String>(); lQueue.add("aaa"); lQueue.add("bbb"); lQueue.add("ccc"); lQueue.add("ddd"); System.out.println("返回队列的头结点的数值:"+lQueue.elementFront()); System.out.println("返回队列的尾节点的数值:"+lQueue.elementRear()); System.out.println(lQueue.length()); System.out.println(lQueue); } } 运行结果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |