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(); } } }