数据结构之队列(链式存储)

来源:互联网 发布:女健身教练 知乎 编辑:程序博客网 时间:2024/06/07 02:39

一:队列结点

package linkedqueue;/** * @packagname:linkedqueue * @classname:LinkedQueueNode * @date:2017/1/25 * @author:cullianns * @des:链式存储结点结构 */public class LinkedQueueNode<T> {    T data;    LinkedQueueNode<T> next;}

二:产生链式队列结点的工厂类

package linkedqueue;/** * @packagname:linkedqueue * @classname:LinkedQueueNodeFactory * @date:2017/1/25 * @author:cullinans * @des:创建链式存储结构结点的工厂类 */public class LinkedQueueNodeFactory {    public static LinkedQueueNode createLinkedQueueNode(){        return new LinkedQueueNode();    }}

三:队列相关的入队出队操作

package linkedqueue;/** * @packagname:linkedqueue * @classname:LinkedQueueList * @date:2017/1/25 * @author:cullinnas * @des:链式存储结构队列 */public class LinkedQueueList<T> {    LinkedQueueNode<T> front;    LinkedQueueNode<T> rear;    //构造方法初始化    public LinkedQueueList() {        this.front=null;        this.rear=null;    }    //入队操作    public int enQueue(LinkedQueueList<T> ll,T data){        LinkedQueueNode<T> tempNode=ll.rear;//定义一个临时结点指向队列的尾部        LinkedQueueNode newnode = LinkedQueueNodeFactory.createLinkedQueueNode();//创建一个新结点        newnode.data=data;//给新结点的数据赋值        newnode.next=null;//新结点的下一个结点的引用赋值为空        ll.rear.next=newnode;//新结点的引用赋值给旧的尾结点的下一个元素引用        ll.rear=newnode;//将队列的尾指针指向新结点        return 0;    }    //出栈    public T deQueue(LinkedQueueList<T> l,T ele){        LinkedQueueNode<T> tempnode=l.front;        if(l.front!=l.rear){//判断队列是否为空            ele=tempnode.data;            tempnode=tempnode.next;            l.front=tempnode;            return ele;        }else if(l.front.data!=null){            return l.front.data;        }        return null;    }    //main方法用来测试队列操作    public static void main(String[] args){        LinkedQueueNode<Integer> twonode=new LinkedQueueNode<Integer>();        twonode.data=1;        twonode.next=null;        LinkedQueueList<Integer> l=new LinkedQueueList<Integer>();        l.front=twonode;        l.rear=twonode;        Integer[] eles=new Integer[]{2,3,4,5,6,7,8};        for(int i=0;i<eles.length;i++){            l.enQueue(l,eles[i]);        }       l.printQueue(l);    }    //打印队列出队数值    public void printQueue(LinkedQueueList l){        T data=null;       while(l.front!=l.rear){           System.out.println(l.deQueue(l,data));       }       if(l.front.data!=null){           System.out.println(l.deQueue(l,data));       }    }}
1 0