队列(链式存储) java实现

http://blog.csdn.net/wuwenxiang91322/article/details/12303111

package com.struct.LinkQueue;



/**
 * 链队列
 * @author WWX
 */
public class LinkQueue<T> {

    //链的数据结构
    private class Node{
        public  T data;
        public  Node next;
        //无参构造函数
        public Node(){}

        public Node(T data,Node next){
            this.data=data;
            this.next=next;
        }
    }
    //队列头指针
    private Node front;
    //队列尾指针
    private Node rear;
    //队列长度
    private int size=0;

    public LinkQueue(){
        Node n=new Node(null,null);
        n.next=null;
        front=rear=n;
    }

    /**
     * 队列入队算法
     * @param data
     * @author WWX
     */
    public void enqueue(T data){
        //创建一个节点
        Node s=new Node(data,null);
        //将队尾指针指向新加入的节点,将s节点插入队尾
        rear.next=s;
        rear=s;
        size++;
    }

    /**
     * 队列出队算法
     * @return
     * @author WWX
     */
    public  T dequeue(){
        if(rear==front){
            try {
                throw new Exception("堆栈为空");
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }else{
            //暂存队头元素
            Node p=front.next;
            T x=p.data;
            //将队头元素所在节点摘链
            front.next=p.next;
            //判断出队列长度是否为1
            if(p.next==null)
                rear=front;
            //删除节点
            p=null;
            size--;
            return  x;
        }
    }

    /**
     * 队列长队
     * @return
     * @author WWX
     */
    public int size(){
        return size;
    }

    /**
     * 判断队列是否为空
     * @return
     * @author WWX
     */
    public  boolean isEmpty(){
        return  size==0;

    }


    public String toString() {
        if(isEmpty()){
            return "[]";
        }else{
            StringBuilder sb = new StringBuilder("[");
            for(Node current=front.next;current!=null;current=current.next){
                sb.append(current.data.toString() + ", ");
            }
            int len = sb.length();
            return sb.delete(len - 2, len).append("]").toString();
        }
    }

    //测试
    public static void main(String[] args) {
        LinkQueue<Integer> queue=new LinkQueue<Integer>();
        queue.enqueue(1);
        queue.enqueue(2);
        queue.enqueue(3);
        queue.enqueue(4);
        queue.enqueue(5);
        queue.enqueue(6);
        System.out.println(queue);
        System.out.println("出队:"+queue.dequeue());
        System.out.println("队列长度="+queue.size());
        System.out.println(queue);
        System.out.println("出队:"+queue.dequeue());
        System.out.println("队列长度="+queue.size());
        System.out.println(queue);
        System.out.println("出队:"+queue.dequeue());
        System.out.println("队列长度="+queue.size());
        System.out.println(queue);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值