数据结构学习之队列的Java实现

来源:互联网 发布:2016年网络流行语串词 编辑:程序博客网 时间:2024/04/29 08:30

 介绍

队列是一种先进先出的数据结构,它只允许在两端执行插入和删除操作。执行插入操作的叫队尾,执行删除操作的叫队头。队列有两种实现方式,一种用数组实现,叫做顺序队列。另一种用链表实现,叫做链式队列。

 顺序队列

SQueue .java

package Queue;/** * Created by xiaojian on 2017/7/19. * 顺序队列 */public class SQueue {//    队列长度    private int size = 0;//    初始长度    private Object[] data = new Object[5];//    第一个元素位置    private int front = 0;//    当前元素位置    private int rear = 0;//    入队    public void push(Object obj){        if(isFull()){           increSize();            front=0;        }        //循环队列,计算出下一个为空的位置        rear = (front+size)%data.length;        data[rear] = obj;        size++;    }//    出队    public Object pop(){        if(isEmpty()){            throw new RuntimeException("队列为空");        }        Object obj = data[front];        data[front] = null;//    计算删除后队头的位置        front = (front+1)%data.length;        size--;        return obj;    }//    遍历    public void display(){       while(!isEmpty()){           System.out.println(pop());       }    }//  扩容    public void increSize(){        Object[] newData = new Object[data.length * 2];        System.arraycopy(data,0,newData,0,data.length);        data = newData;    }//    判断是否已满    public boolean isFull(){        return size == data.length;    }//    判断是否为空    public boolean isEmpty(){        return size==0;    }//    返回队列长度    public int getSize(){        return size;    }}

链式队列

链式队列和单链表结构一样,只不过只能从队尾插入,从队头删除。

package Queue;/** * Created by xiaojian on 2017/7/19. * 链式队列 */public class LinkQueue {    private int size = 0;    private Node front = null;    private Node rear = null;//    入队    public void push(Object o){        Node node = new Node();        node.setData(o);//        队列为空则赋值给front        if(isEmpty()){            front=rear=node;        }else {            rear.setNext(node);            rear=node;        }        size++;    }//    出队    public Object pop(){        if(isEmpty()){            throw new RuntimeException("队列为空");        }        Node node = front;        front = null;        front = node.getNext();        size--;        return node.getData();    }//    遍历    public void display(){        while(!isEmpty()){            System.out.println(pop());        }    }    //判空    public boolean isEmpty(){        return size == 0;    }}
原创粉丝点击