Java栈,队列,优先队列的使用

1. 栈的使用:

import java.util.*;
public class Main{
    
    public static void main(String[] args){
        Deque<String> stack = new LinkedList();
        stack.push("student");
        stack.push("teacher");
        stack.push("president");//push:入栈
        while(!stack.isEmpty())//检查栈空
        {    
            String s=stack.pop();//pop:出栈
            System.out.println(s);
        }
    }
}

2.队列的使用:

import java.util.*;
public class Main{
    
    public static void main(String[] args){
        Deque<String> que = new LinkedList();
        que.offer("BJ");
        que.offer("HZ");
        que.offer("CQ");//offer:入栈
        while(!que.isEmpty())//检查栈空
        {
            String s=que.pop();//pop:出栈
            System.out.println(s);
        }
    }
}

LinkedList类内部使用双链表实现,插入、删除效率较高。

 3.优先队列的使用

 方式一:在类中定义比较函数,实现Comparable接口。

import java.util.*;
class Edge implements Comparable{
    String to;
    int w;
    Edge(){}
    Edge(String to,int w)
    {
        this.to=to;
        this.w=w;
    }
    public int compareTo(Object o)
    {
        Edge e=(Edge)o;
        return w-e.w;    //由小到大
    }
}
public class Main{
    
    public static void main(String[] args){
        PriorityQueue<Edge> pque=new PriorityQueue();
        pque.offer(new Edge("SH",6));
        pque.offer(new Edge("WH",9));
        pque.offer(new Edge("CQ",1));
        while(!pque.isEmpty())
        {
            Edge e= pque.poll();
            System.out.println(e.to+", "+e.w);
        }
    }
}

方式二:定义比较类,实现Comparator接口。

import java.util.*;
class Edge{
    String to;
    int w;
    Edge(){}
    Edge(String to,int w)
    {
        this.to=to;
        this.w=w;
    }
}
class Comp implements Comparator<Edge>{
    public int compare(Edge e1,Edge e2)
    {
        return e1.w-e2.w;//由小到大排序
    }
}
public class Main{
    
    public static void main(String[] args){
        PriorityQueue<Edge> pque=new PriorityQueue(new Comp());
        pque.offer(new Edge("HJ",17));
        pque.offer(new Edge("HN",34));
        pque.offer(new Edge("NJ",12));
        while(!pque.isEmpty())
        {
            Edge e=pque.poll();
            System.out.println(e.to+", "+e.w);
        }
    }
}

4.用邻接表存储图。

import java.util.*;
class Edge{
    String to;
    int w;
    Edge(){}
    Edge(String to,int w)
    {
        this.to=to;
        this.w=w;
    }
}
public class Main{
    
    public static void main(String[] args){
        ArrayList<Edge>[] arc=new ArrayList[2];
        arc[0] = new ArrayList<Edge>();
        arc[0].add(new Edge("HJ",28));
        arc[0].add(new Edge("SH",21));
        arc[1] = new ArrayList<Edge>();
        arc[1].add(new Edge("NJ",12));
        arc[1].add(new Edge("SZ",19));
        for(int i=0;i<arc.length;i++)
        {
            for(int j=0;j<arc[i].size();j++)
            {
                Edge e=arc[i].get(j);
                System.out.print(e.to+", "+e.w+"  ");
            }
            System.out.println();
        }
    }
}
原文地址:https://www.cnblogs.com/program-ccc/p/5716315.html