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

一:队列结点
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值