Java 使用链表来实现队列功能

/**
 * 链表元素定义
 * Create by zxb on 2017/8/27
 */
public class Element<T> {

    private Element<T> next;

    private T value;

    public Element<T> getNext() {
        return next;
    }

    public void setNext(Element<T> next) {
        this.next = next;
    }

    public T getValue() {
        return value;
    }

    public void setValue(T value) {
        this.value = value;
    }
}

/**
 * 列表模板接口
 * Created by zhengxb on 2017/8/27.
 */
public interface IList<T> {

    boolean pushBack(T newElement);

    boolean popFront();

    Element<T> front();

    int size();
}

/**
 * 链表实现
 * Create by zxb on 2017/8/27
 */
public class ListImpl<T> implements IList<T> {

    private Element<T> first = null;

    private Element<T> last = null;

    private int size = 0;

    @Override
    public boolean pushBack(T newElement) {
        Element<T> element = new Element<>();
        element.setValue(newElement);
        if (size == 0) {
            first = element;
            size++;
            return true;
        }
        if (last == null) {
            last = new Element<>();
            last.setValue(newElement);
            first.setNext(last);
        } else {
            last.setNext(element);
            last = element;
        }
        size++;
        return true;
    }

    @Override
    public boolean popFront() {
        if (size == 0) {
            return false;
        }
        first = first.getNext();
        size--;
        return true;
    }

    @Override
    public Element<T> front() {
        return first;
    }

    @Override
    public int size() {
        return size;
    }
}

/**
 * 队列接口
 * Create by zxb on 2017/8/27
 */
public interface IQueue<R> {

    boolean push(R newElement);

    boolean pop();

    R front();

    int size();

    boolean display();
}

/**
 * 队列实现
 * Create by zxb on 2017/8/27
 */
public class QueueImpl<R> implements IQueue<R> {

    private ListImpl<R> list;

    @Override
    public boolean push(R newElement) {
        if (list == null) {
            list = new ListImpl<>();
        }
        list.pushBack(newElement);
        return true;
    }

    @Override
    public boolean pop() {
        if (list == null) {
            list = new ListImpl<>();
        }
        list.popFront();
        return true;
    }

    @Override
    public R front() {
        return list.front().getValue();
    }

    @Override
    public int size() {
        return list.size();
    }

    @Override
    public boolean display() {
        Element<R> front = list.front();
        System.out.println("列表元素:");
        Element<R> temp = front;
        while (temp != null) {
            System.out.print(temp.getValue());
            temp = temp.getNext();
            System.out.println("\t");
        }
        return true;
    }
}

/**
 * Create by zxb on 2017/8/27
 */
public class Test {

    public static void main(String[] args) {
        IQueue<String> queue = new QueueImpl<>();
        queue.push("one");
        queue.push("two");
        queue.push("three");
        queue.pop();
        queue.display();
    }
}

执行结果:


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值