优先队列初级实现

来源:互联网 发布:网络布线报价单2016 编辑:程序博客网 时间:2024/06/05 07:31
import java.awt.Font;
import java.util.Arrays; 


import edu.princeton.cs.algs4.In; 


import edu.princeton.cs.algs4.StdIn; 


import edu.princeton.cs.algs4.StdOut; 
import edu.princeton.cs.algs4.StdDraw;
import edu.princeton.cs.algs4.StdRandom;
import java.util.Iterator;


public class MaxPQ 
{// 优先队列中的初级实现
    private int[] a;
    private int N;
    public MaxPQ()
    {// 创建一个优先队列
        a = new int[100];
    }
    public MaxPQ(int max)
    {// 创建一个最大容量为max的优先队列
        a = new int[max];
    }
    public MaxPQ(int[] b)
    {// 用a[]中的元素创建一个优先队列
        int len = b.length;
        a = new int[len];
        for(int i=0; i<len; i++)
        {
            a[i] = b[i];
        }
    }
    public void insert(int v)
    {// 向优先队列中插入一个元素
        a[N++] = v;
    }
    public int max()
    {// 返回最大元素
        int max = a[0];
        for(int i=1; i<N; i++)
        {
            if(less(max, a[i]))
                max = a[i];
        }
        return max;
    }
    public boolean less(int v, int w)
    {
        return v < w;
    }
    public int delMax()
    {// 删除并返回最大元素
        int max = 0;
        for(int i=1; i<N; i++)
        {
            if(less(a[max], a[i]))
                max = i;
        }
        exch(a, max, N-1);
        int item = a[--N];
        return item;
    }
    public void exch(int[] a, int i, int j)
    {// 对换元素
        int tmp = a[i];
        a[i] = a[j];
        a[j] = tmp;
    }
    public boolean isEmpty()
    {// 返回队列是否为空
        return N == 0;
    }
    public int size()
    {// 返回队列中元素的个数
        return N;        
    }
    public void resize(int max)
    {// 调整数组大小
        int[] b = new int[max];
        for(int i=0; i<N; i++)
        {
            b[i] = a[i];
        }
        a = b;
    }
    public void show()
    {// 显示数组的内容
        for(int i=0; i<N; i++)
        {
            StdOut.printf(a[i] + " ");
        }
        StdOut.println();
    }
    public static void main(String[] args)
    {
        int len = StdIn.readInt();
        MaxPQ maxPq = new MaxPQ(len);
        for(int i=0; i<len; i++)
        {
            maxPq.insert(StdIn.readInt());
        }
        maxPq.show();
        for(int i=0; i<len; i++)
        {
            StdOut.printf(maxPq.delMax() + " ");
        }
        
    }
原创粉丝点击