数据结构学习笔记(四) 队列

队列:
  具有一定约束的线性表。在一端插入,另外一端进行删除。

判断队列是否为空:
  当rear = front = 0的时候(刚开始rear=front=0,增加元素rear+1,减少元素,front+1)

让数组成为循环队列:
  front和rear都模数组的长度。

判断队列元素是否满:
  当让一个数组作为一个循环队列的时候,队列满的时候也是rear = front,所以,这时候没有办法进行分辨。
  解决:让数组不要存满,只存储n-1个元素(当(rear+1)%数组的长度 == front的时候,队列就满了)

队列的顺序存储(数组实现循环队列):

  

package queue;

/**
 * front 和  rear 都为实际的数组下标,不是元素的个数
 * @author 牟同学
 *
 */
public class QueueArray {
    private static int[] a = new int[6];
    //删除
    private static int front ;
    //插入
    private static int rear ;
    
    public static void main(String[] args) {
        System.out.println(insert(10));
        System.out.println(insert(20));
        show();
        System.out.println(pop());
        show();
    }
    /**
     * 入队列
     */
    public static String insert(int item){
        if((rear+1)%a.length == front){
            return "队列已经满了";
        }
        a[rear] = item;
        rear = (rear+1)%a.length;
        return item+"入队成功";
    }
    
    /*
     * 出队列
     */
    public static String pop(){
        if(front == rear){
            return "队列为空";
        }
        a[front] = 0;
        front = (front+1)%a.length;
        return "出队列成功";
    }
    
    public static void show(){
        System.out.println("队列元素为:");
        for (int i = 0; i < a.length; i++) {
            if(a[i] != 0){
                System.out.print(a[i]+" ");
            }
        }
        System.out.println();
    }
}

队列的链式存储:

package queue;

import stack.Node;

public class QueueChained {
    //不能指向队尾(对头元素)
    public  static Node front ;
    //队尾
    public static Node rear ;
    
    public static void main(String[] args) {
        System.out.println(insert(10));
        System.out.println(insert(20));
        show();
        System.out.println(pop());
        show();
    }
    /**
     * 入队列
     */
    public static String insert(int item){
        Node node = new Node(item);
        if(rear != null){
            rear.next = node;
        }else{
            rear = node;
        }
        rear = node;
        if(front == null){
            front = node ;
        }
        return item+"插入成功";
    }
    
    /**
     * 出队列
     */
    public static String pop(){
        if(rear == null){
            return "队列为空";
        }
        //只有一个元素
        if(front == rear){
            front = rear = null;
            return front.data+"出队列成功";
        }else{
            int a = front.data;
            front = front.next;
            return front.data+"出队列成功";
        }
    }
    
    public static void show(){
        Node node = front;
        System.out.print("队列中的元素有:");
        while(node != null){
            System.out.print(node.data+"  ");
            node = node.next;
        }
        System.out.println();
    }
}

Node类:

  

package queue;

public class Node {
    public int data ;
    public  Node next ;
    public Node(int data) {
        this.data = data;
    }
    
}

 

posted @ 2017-05-25 17:58  迪拜trashman  阅读(257)  评论(0编辑  收藏  举报