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

Java栈,队列,优先队列的使用的更多相关文章

  1. 【STL】栈+队列+优先队列(详)+ 拯救行动题解

    一.栈 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元 ...

  2. java 集合 Connection 栈 队列 及一些常用

    集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...

  3. Java 容器之 Connection栈队列及一些常用

    集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...

  4. java面向对象的栈 队列 优先级队列的比较

    栈 队列 有序队列数据结构的生命周期比那些数据库类型的结构(比如链表,树)要短得多.在程序操作执行期间他们才被创建,通常用他们去执行某项特殊的任务:当完成任务之后,他们就会被销毁.这三个数据结构还有一 ...

  5. 细说并发5:Java 阻塞队列源码分析(下)

    上一篇 细说并发4:Java 阻塞队列源码分析(上) 我们了解了 ArrayBlockingQueue, LinkedBlockingQueue 和 PriorityBlockingQueue,这篇文 ...

  6. java数据结构——队列、循环队列(Queue)

    每天进步一点点,坚持就是成功. 1.队列 /** * 人无完人,如有bug,还请斧正 * 继续学习Java数据结构————队列(列队) * 队列和栈一样,都是使用数组,但是队列多了一个队头,队头访问数 ...

  7. Java并发指南11:解读 Java 阻塞队列 BlockingQueue

    解读 Java 并发队列 BlockingQueue 转自:https://javadoop.com/post/java-concurrent-queue 最近得空,想写篇文章好好说说 java 线程 ...

  8. 解读 java 并发队列 BlockingQueue

    点击添加图片描述(最多60个字)编辑 今天呢!灯塔君跟大家讲: 解读 java 并发队列 BlockingQueue 最近得空,想写篇文章好好说说 java 线程池问题,我相信很多人都一知半解的,包括 ...

  9. 10分钟搞定 Java 并发队列好吗?好的

    | 好看请赞,养成习惯 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it ...

随机推荐

  1. [Python] 弗洛伊德(Floyd)算法求图的直径并记录路径

    相关概念 对于一个图G=(V, E),求图中两点u, v间最短路径长度,称为图的最短路径问题.最短路径中最长的称为图的直径. 其中,求图中确定的某两点的最短路径算法,称为单源最短路径算法.求图中任意两 ...

  2. 如何在windows10环境下安装Pytorch-0.4.1版本

    开始是按照教程:https://blog.csdn.net/xiangxianghehe/article/details/80103095 安装了Pytorch0.4.0,但是安装后发现在import ...

  3. 关于Kinect音频开发的探究

    1.笔者在<Kinect体感程序设计入门>(王森著)的这本书中看到可以使用powershell和COM对象无缝整合,轻松的使用windows系统自带的语音合成功能. 步骤:•打开进入pow ...

  4. 【P2016】战略游戏(贪心||树状DP)

    这个题真是...看了一会之后,发现有一丝丝的熟悉,再仔细看了看,R,这不是那个将军令么...然后果断调出来那个题,还真是,而且貌似还是简化版的...于是就直接改了改建树和输入输出直接交了..阿勒,就2 ...

  5. Kafka详解五:Kafka Consumer的底层API- SimpleConsumer

    问题导读 1.Kafka如何实现和Consumer之间的交互?2.使用SimpleConsumer有哪些弊端呢? 1.Kafka提供了两套API给Consumer The high-level Con ...

  6. 移动端的坑 之 在可编辑的div中实现placeholder

    1.当我们个  div 设置了 contenteditable = "true" 这个块状元素就可以编辑了, 如果要实现 placeholder 直接写上去是没有效果的 <d ...

  7. UOJ12 猜数

    这一天,小Y.小D.小C正在愉快地玩耍. 小Y是个数学家,他一拍脑袋冒出了一个神奇的完全平方数 nn. 小D是个机灵鬼,很快从小Y嘴里套出了 nn 的值.然后在脑内把 nn 写成了 a×ba×b的形式 ...

  8. Codeforces Round #374 (Div. 2) A , B , C 水,水,拓扑dp

    A. One-dimensional Japanese Crossword time limit per test 1 second memory limit per test 256 megabyt ...

  9. Codeforces Round #285 (Div. 2) A, B , C 水, map ,拓扑

    A. Contest time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  10. JVM内存管理基础概念

    .内存的不同形态 物理内存 虚拟内存 .内存的使用形式 内核空间 用户空间 .java虚拟机运行时数据划分 PC寄存器:保存当前程序运行时的内存地址. Java栈:总是和线程关联,每个线程拥有一个ja ...