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();
}
}
}
Java栈,队列,优先队列的使用的更多相关文章
- 【STL】栈+队列+优先队列(详)+ 拯救行动题解
一.栈 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元 ...
- java 集合 Connection 栈 队列 及一些常用
集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...
- Java 容器之 Connection栈队列及一些常用
集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...
- java面向对象的栈 队列 优先级队列的比较
栈 队列 有序队列数据结构的生命周期比那些数据库类型的结构(比如链表,树)要短得多.在程序操作执行期间他们才被创建,通常用他们去执行某项特殊的任务:当完成任务之后,他们就会被销毁.这三个数据结构还有一 ...
- 细说并发5:Java 阻塞队列源码分析(下)
上一篇 细说并发4:Java 阻塞队列源码分析(上) 我们了解了 ArrayBlockingQueue, LinkedBlockingQueue 和 PriorityBlockingQueue,这篇文 ...
- java数据结构——队列、循环队列(Queue)
每天进步一点点,坚持就是成功. 1.队列 /** * 人无完人,如有bug,还请斧正 * 继续学习Java数据结构————队列(列队) * 队列和栈一样,都是使用数组,但是队列多了一个队头,队头访问数 ...
- Java并发指南11:解读 Java 阻塞队列 BlockingQueue
解读 Java 并发队列 BlockingQueue 转自:https://javadoop.com/post/java-concurrent-queue 最近得空,想写篇文章好好说说 java 线程 ...
- 解读 java 并发队列 BlockingQueue
点击添加图片描述(最多60个字)编辑 今天呢!灯塔君跟大家讲: 解读 java 并发队列 BlockingQueue 最近得空,想写篇文章好好说说 java 线程池问题,我相信很多人都一知半解的,包括 ...
- 10分钟搞定 Java 并发队列好吗?好的
| 好看请赞,养成习惯 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it ...
随机推荐
- debian内核代码执行流程(三)
接续<debian内核代码执行流程(二)>未完成部分 下面这行输出信息是启动udevd进程产生的输出信息: [ ]: starting version 175是udevd的版本号. 根据& ...
- INSPIRED启示录 读书笔记 - 第35章 情感接纳曲线
技术接纳曲线 涉及了技术创新者.尝鲜者.早期消费大众.后期消费大众和跟随者,很少有产品能越过鸿沟——获得尝鲜者以外消费者的青睐 不同类型的用户具有不同的情感需求,除了技术接纳曲线模型描述用户外,还应该 ...
- JSP DAO(Model)
示例代码: 1. Users类 package com.po; public class Users { private String username; private String passwor ...
- 【简单dp】poj 2127 Greatest Common Increasing Subsequence【最长公共上升子序列】【模板】
Sample Input 5 1 4 2 5 -12 4 -12 1 2 4 Sample Output 2 1 4 题目:给你两个数字序列,求出这两个序列的最长公共上升子序列.输出最长的长度,并打表 ...
- Thinkpad E440个性化设置:如何/禁用关闭触摸板?
#如何禁用/关闭触摸版 默认情况下,ThinkPad E440是不支持触摸板的关闭功能,如果要关闭的话,需要去官方下载相应的鼠标驱动 UltraNav. 下载地址:http://think.lenov ...
- 【转】ORACLE的数据类型
原文;http://linjian004.bokee.com/3916067.html 常用的数据库字段类型如下: 字段类型 中文说明 限制条件 其它说明 CHAR 固定长度字符串 最大长度2000 ...
- js状态模式
状态模式,当一个对象的内在状态改变时允许改变其行为,这个对象看起来是改变了其类. 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列类当 ...
- ie 元素兼容性总结
css 属性元素 2.z-index 正常按自身层级决定显示顺序,在ie6 7 还需要依赖于父级的层级决定,排布在后边的元素排在前面.后来者居上覆盖前者. IE6,7支持inline元素转换成inli ...
- SSIS包的开发
在上一章节中我们初步了解了SSIS体系结构以及如何创建一个SSIS包.现在就介绍一下如何在创建的包中使用各个选项卡.打开上一章节创建的SSIS包.整个界面风格如下: 在整个包中包含了控制流选项卡.数据 ...
- spring: 使用Aspectj代理EnabelAspectjAutoProxy
使用JavaConfig的话,可以在配置类的类级别上通过使用EnableAspectJ-AutoProxy注解启用自动代理功能. package ch2.test; import org.aspect ...