Java 算法(背包,队列和栈)
Dijkstra的双栈算术表达式求值算法:
import java.util.*;
public class Main
{
public static double evaluate(String abs) {
Stack<String> ops = new Stack<String>();
Stack<Double> vals = new Stack<Double>();
char arr[]=abs.toCharArray();
for(char c:arr){
String s=c+"";
if(s.equals(""));
else if(s.equals("("));
else if (s.equals("+")) ops.push(s);
else if (s.equals("-")) ops.push(s);
else if (s.equals("*")) ops.push(s);
else if (s.equals("/")) ops.push(s);
else if (s.equals(")"))
{
String op=ops.pop();
double v=vals.pop();
if(op.equals("*")) v=vals.pop()*v;
else if(op.equals("+")) v=vals.pop()+v;
else if(op.equals("-")) v=vals.pop()-v;
else if(op.equals("/")) v=vals.pop()/v;
vals.push(v);
}
else vals.push(Double.parseDouble(s));
}
return vals.pop();
}
public static void main(String args[])
{
Scanner s=new Scanner(System.in);
String s1=s.next();
System.out.print(evaluate(s1));
}
}
下压栈(LIFO)能够动态调整数组大小的实现
import java.util.*;
import java.lang.*;
public class Main<Item> implements Iterable<Item> {
private Item[] a = (Item[])new Object[1];//栈元素
private int N = 0;//元素数量 public boolean isEmpty(){
return N == 0;
} public int size(){
return N;
} public void resize(int max){
Item[] temp = (Item[])new Object[max];
for(int i = 0;i<N;i++){
temp[i] = a[i];
}
a = temp;
} public void push(Item item){
if(N == a.length) resize( 2 * a.length);
a[N++] = item;
} public Item pop(){
Item item = a[--N];
a[N] = null;
if(N>0 && N == a.length/4) resize(a.length/2);
return item;
} // @Override
public Iterator<Item> iterator() {
return new ReverseArrayIterator();
} private class ReverseArrayIterator implements Iterator<Item>{
private int i = N;
public boolean hasNext() {
return i > 0;
} public Item next() {
return a[--i];
} // @Override
public void remove() {
throw new UnsupportedOperationException();
} }
public static void main(String args[])
{
Main<String> s=new Main<String>();
Scanner cin=new Scanner(System.in);
System.out.println("Input a String end with $:");
while(cin.hasNext()){
String item=cin.next();
if(item.equals("$")){
break;
}
else {
s.push(item);
}
}
// foreach语句是while语句的一种简写方式
System.out.println("display by for:");
for(String str : s){
System.out.print(str+" ");
}
System.out.println();
// which
System.out.println("display by which:");
Iterator<String> it=s.iterator();
while(it.hasNext()){
String i=it.next();
System.out.print(i+" ");
}
} }
Java 算法(背包,队列和栈)的更多相关文章
- java算法--普通队列
数据结构队列 首先明确一下队列的概念. 队列是一种有序列表,使用数组的结构来存储队列的数据. 队列是一种先进先出的算法.由前端加入,由后端输出. 如下图: 第一个图 第二个图 第三个图 这就是队列 ...
- java算法--循环队列
循环队列 我们再用队列得时候不知道发没发现这样一个问题. 这是一个只有三个位置得队列,在进行三次加入(addqueue)操作和三次取出(get)操作之后再进行加入操作时候的样子.明显可以看到,队列已经 ...
- java算法-单向队列
队列是一种:先进先出,后进后出的数据结构 单项队列: 从前面删除元素,从后面插入元素,跟现实中排队是一样的道理 这里我们用指针移动位置的方法.因为数组删除元素,如果我们要跟现实中排队效果一样,就需要移 ...
- Java数据结构和算法(四)——栈
前面我们讲解了数组,数组更多的是用来进行数据的存储,纯粹用来存储数据的数据结构,我们期望的是插入.删除和查找性能都比较好.对于无序数组,插入快,但是删除和查找都很慢,为了解决这些问题,后面我们会讲解比 ...
- 算法<初级> - 第二章 队列、栈、哈希表相关问题
算法 - 第二章 数据结构 题目一 用数组实现大小固定的队列和栈(一面题) 数组实现大小固定栈 /*** * size是对头索引(initSize是固定大小) 也是当前栈大小 * size=下个进队i ...
- C语言算法系列---1.队列和栈
写在前面:在家玩了好久,实在是不知道干嘛了,突然想找些事做,现在是时候做些什么了.这些东西不见得多高深,也可能很简单,但很基础,也无法忽视.同时,也是自己学习走过的一条路. 这是开头,就写写C的队列和 ...
- 两个栈实现队列+两个队列实现栈----java
两个栈实现队列+两个队列实现栈----java 一.两个栈实现一个队列 思路:所有元素进stack1,然后所有出s ...
- 图解堆算法、链表、栈与队列(Mark)
原文地址: 图解堆算法.链表.栈与队列(多图预警) 堆(heap),是一类特殊的数据结构的统称.它通常被看作一棵树的数组对象.在队列中,调度程序反复提取队列中的第一个作业并运行,因为实际情况中某些时间 ...
- java 队列和栈及示例
一.栈的实现: 1.Stack实现 接口实现: class Stack<E> extends Vector<E> {......} 常用的api函数如下: boolean is ...
- Java实现 蓝桥杯 算法提高 队列操作
算法提高 队列操作 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 队列操作题.根据输入的操作命令,操作队列(1)入队.(2)出队并输出.(3)计算队中元素个数并输出. 输入格式 ...
随机推荐
- nginx反向代理实例
通过一个例子演示一下nginx是如何代理服务的,并且讲一下nginx.conf的关于server模块和location模块的配置 server模块:配置虚拟主机的相关参数,一个http中可以有多个se ...
- php set_time_limit()的作用是什么
php set_time_limit()用法测试 一.总结 一句话总结:在php中set_time_limit函数是用来限制页面执行时间的,如我想把一个php页面的执行时间定义为5秒就可以set_ti ...
- python+selenium:点击页面元素时报错:WebDriverException: Message: Element is not clickable at point (1372.5, 9.5). Other element would receive the click: <li style="display: list-item;" id="tuanbox"></li>
遇到一个非常郁闷的问题,终于解决了, 问题是这样的,NN网站的价格计划,每一个价格计划需要三连击才能全部点开,第一个房型的价格计划是可以正确三连击打开的,可是第二个房弄就不行了,报错说不是可点击的 ...
- 非常棒的——python Deep learning 学习笔记
https://www.cnblogs.com/zhhfan/p/9985991.html
- 0.1.2 max_element和min_element的用法
找到的位置都是第一个最大(小)的元素,即存在多个相同大小的元素的时候找到的是第一个. 返回的是指针(元素地址). printf("%d\n",*max_element(a,a+n) ...
- 【洛谷p1932】A+B A-B A*B A/B A%B Problem
(emmmm) 这道题成功让我见识到了Dev撤回的高端大气上档(dàng)次. A+B A-B A*B A/B A%B Problem[传送门](真是个优秀的高精) 算法:::::::(模板题弄这么费 ...
- python面向对象之 类
内容梗概: 1. 类的成员 2. 类的成员-变量 3. 类的成员-方法 4. 类的成员-属性 5. 私有 1.类的成员class 类名: 方法 def __init__(self, 参数1, 参数2. ...
- Web 自动化测试框架 sweetest 介绍
项目开源: https://github.com/tonglei100/sweetest 文章转载:https://segmentfault.com/a/1190000011612061 介绍 swe ...
- 关于int8_t,uint8_t.....等数据类型的理解
实习中,今天在看公司源码的时候,发现前辈给的代码都是这样的 typedef int8_t int8; typedef uint8_t uint8; typedef int16_t int16; typ ...
- hdu 1257 LIS (略坑5
---恢复内容开始--- 最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...