数据结构之队列

来源:互联网 发布:西瓜影音mac版 官方 编辑:程序博客网 时间:2024/06/05 18:32

队列概述

队列是只允许在表的一端进行插入,而在表的另一端进行删除操作的一种特殊线性表。允许插入的一端称为“队尾”,允许删除的一端称为“队首”。

队列特点

先进先出(FIFO)

队列结构


队列的主要操作

代码如下:

package myQueue;public interface IQueue<E> {public void clear();//清空public boolean isEmpty();// 判空public int length();// 求长度public E peek(); //取对首public void offer(E x)throws Exception;//入队public E poll();//出队}
队列的链式表示

队列的链式存储结构称为链队列,其链式存储结构在此用不带头结点的单链表来实现。因为存在front和rear这两个头尾指针,无需对链式中间的结点进行操作

链队列结构:


首先需要一个结点类来描述链队中的每一个结点:

public class Node<E> {private E data;private Node next;public Node(){this(null,null);}public Node(E x, Node next) {// TODO Auto-generated constructor stubdata = x;this.next = next;}public Node(E x){this.data = x;}public E getData() {return data;}public void setData(E data) {this.data = data;}public Node getNext() {return next;}public void setNext(Node next) {this.next = next;}}

下面是链表的具体实现:

public class LinkQueue<E> implements IQueue<E> {private Node<E> front,rear;private int curlen;public LinkQueue(){front = null;rear = null;curlen =0;}@Override//队列置空public void clear() {front = rear = null;curlen = 0;}//判断是否是空队列public boolean isEmpty() {return front == null;}
@Override
//求队列中的长度public int length() {/* 没有curlen的话 Node<E> p = front; int length = 0; while(p!=null){ p = p.getNext(); length++; } return length; */return curlen;}@Override//队首元素的函数public E peek() {if(isEmpty()){return null;}return front.getData();}@Override//入队操作public void offer(E x) throws Exception {Node<E> p = new Node<E>(x);if (p == null)// 内存空间不够,满队异常 throw new Exception("链队列已满");       if (!isEmpty( )) {         // 队列非空   rear.setNext(p);   rear = p;                      }       else  {//空队时入队操作,需调整front及rear   front = rear = p;       }       curlen++;}@Override//出队操作public E poll() {if (isEmpty())//空队异常    return  null;if (length()==1) //如果出队时队只有一个结点,需调整rear            rear=null;E dataOut = front.getData();   front=front.getNext();curlen--;return dataOut;}// 输出函数(从队首到队尾)public void display ( ) {  Node<E> p=front;while( p!=null ) {System.out.print(p.getData( ));p=p.getNext();}}}

循环顺序队列




1 0
原创粉丝点击