数据结构之队列的java实现

队列在计算机术语中使用queue,和list(排)其实是一个意思。队列也是一种数据结构,类似于栈,只是与栈相反,在队列中最先插入的数据也最先被移除,即先进先出(FIFO,First In First Out)。队列可以理解成排队,比如,食堂窗口排的队,越在前面的,越早得到服务而先离开。在银行大厅的排号的机器也许就用了队列这个数据结构。在打印的时候,有“添加到队列”的选项,队列应用是很广泛的。
队列的操作有:插入到队尾数据项,移除队头数据项,查看数据项等功能。

下面用Java实现队列的基本功能(数组版)。

package cn.zhf.list;
public class MyQueue {
    private int maxSize;//定义最大容量
    private int[] qarray;//存放元素的数组
    private int front;//前一个元素索引
    private int rear;//后一个元素索引
    private int nItems;//队列中元素的个数
    //构造对象并初始化
    public MyQueue(int s){
        maxSize = s;
        qarray = new int[maxSize];
        front = 0;
        rear = -1;
        nItems = 0;
    }
    //在队列尾端插入元素
    public void enqueue(int i){
        if(rear == maxSize - 1){
            rear = -1;
        }
        qarray[++rear] = i;
        nItems++;
    }
    //删除队首元素
    public int dequeue(){
        int temp = qarray[front++];
        if(front == maxSize){
            front = 0;
        }
        nItems--;
        return temp;
    }
    public int peekFront(){//取第一个元素
        return qarray[front];
    }
    public boolean isEmpty(){
        return (nItems == 0);
    }
    public static void main(String[] args) {
        MyQueue queue = new MyQueue(5);
        queue.enqueue(1);
        queue.enqueue(2);
        queue.enqueue(3);
        queue.enqueue(4);
        queue.enqueue(5);
        while(!queue.isEmpty()){
            int i = queue.dequeue();
            System.out.println(i);
        }
    }
}
下面是用链表实现的队列。

package cn.zhf.list;
//其中的Link和LinkList两类同栈中的相同
public class LinkQueue {
        private LinkList list;
        public LinkQueue(){
            list = new LinkList();
        }
        public boolean isEmpty(){
            return list.isEmpty();
        }
        public void insert(int id,double dd){
            list.insertFirst(id, dd);
        }
        public Link delete(){
            return list.deleteFirst();
        }
        public void display(){
            list.displayLink();
        }
    public static void main(String[] args) {
        LinkQueue lq = new LinkQueue();
        lq.insert(12, 20.0);
        lq.insert(13, 20.1);
        lq.insert(14, 20.2);
        lq.display();
        System.out.println("-----------");
        lq.delete();
        lq.display();
    }
}
运行结果:

14,20.2
13,20.1
12,20.0
-----------
13,20.1
12,20.0




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值