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 算法(背包,队列和栈)的更多相关文章

  1. java算法--普通队列

    数据结构队列 首先明确一下队列的概念. 队列是一种有序列表,使用数组的结构来存储队列的数据. 队列是一种先进先出的算法.由前端加入,由后端输出. 如下图: ​ 第一个图 第二个图 第三个图 这就是队列 ...

  2. java算法--循环队列

    循环队列 我们再用队列得时候不知道发没发现这样一个问题. 这是一个只有三个位置得队列,在进行三次加入(addqueue)操作和三次取出(get)操作之后再进行加入操作时候的样子.明显可以看到,队列已经 ...

  3. java算法-单向队列

    队列是一种:先进先出,后进后出的数据结构 单项队列: 从前面删除元素,从后面插入元素,跟现实中排队是一样的道理 这里我们用指针移动位置的方法.因为数组删除元素,如果我们要跟现实中排队效果一样,就需要移 ...

  4. Java数据结构和算法(四)——栈

    前面我们讲解了数组,数组更多的是用来进行数据的存储,纯粹用来存储数据的数据结构,我们期望的是插入.删除和查找性能都比较好.对于无序数组,插入快,但是删除和查找都很慢,为了解决这些问题,后面我们会讲解比 ...

  5. 算法<初级> - 第二章 队列、栈、哈希表相关问题

    算法 - 第二章 数据结构 题目一 用数组实现大小固定的队列和栈(一面题) 数组实现大小固定栈 /*** * size是对头索引(initSize是固定大小) 也是当前栈大小 * size=下个进队i ...

  6. C语言算法系列---1.队列和栈

    写在前面:在家玩了好久,实在是不知道干嘛了,突然想找些事做,现在是时候做些什么了.这些东西不见得多高深,也可能很简单,但很基础,也无法忽视.同时,也是自己学习走过的一条路. 这是开头,就写写C的队列和 ...

  7. 两个栈实现队列+两个队列实现栈----java

                                               两个栈实现队列+两个队列实现栈----java 一.两个栈实现一个队列 思路:所有元素进stack1,然后所有出s ...

  8. 图解堆算法、链表、栈与队列(Mark)

    原文地址: 图解堆算法.链表.栈与队列(多图预警) 堆(heap),是一类特殊的数据结构的统称.它通常被看作一棵树的数组对象.在队列中,调度程序反复提取队列中的第一个作业并运行,因为实际情况中某些时间 ...

  9. java 队列和栈及示例

    一.栈的实现: 1.Stack实现 接口实现: class Stack<E> extends Vector<E> {......} 常用的api函数如下: boolean is ...

  10. Java实现 蓝桥杯 算法提高 队列操作

    算法提高 队列操作 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 队列操作题.根据输入的操作命令,操作队列(1)入队.(2)出队并输出.(3)计算队中元素个数并输出. 输入格式 ...

随机推荐

  1. github优秀前端项目分享(转)

    http://microjs.com/# 该网站的资源都托管到了github,microjs.com是一个可以让你选择微型的js类库的网站,该网站里的js库都是压缩后不大于5KB的,非常实用 http ...

  2. Day2-异步IO+Scrapy爬虫

    一.异步IO http://www.cnblogs.com/wupeiqi/articles/6229292.html 这篇文章写的不错,展示了多种高并发的方式,从同步执行→多线程→多进程→async ...

  3. 记录结果再利用的"动态规划"

    2018-09-24 15:01:37 动态规划(DP: Dynamic Programming)是算法设计方法之一,在程序设计竞赛中经常被选作题材.在此,我们考察一些经典的DP问题,来看看DP究竟是 ...

  4. android 趟坑记

    又是一个伤感的故事,但阿古好像已经习以为常了. 大半年的辛苦又泡汤了,故事是这样. 帝都某高端小区,封闭局域网,做一个可视对讲+门禁的APP,之前那一版因为使用了商业代码,又不想花钱,于是找阿古换一个 ...

  5. win10 java环境变量

    https://jingyan.baidu.com/article/fd8044fa2c22f15031137a2a.html

  6. ROS中遇到的一些问题和解决(更新)

    检查 roscore 是否正常打开 [ERROR] Failed to contact master at [localhost:11311]. Retrying... [ERROR] [144653 ...

  7. IDEA分享项目到GitHub出现Could not read from remote repository

    如果VCS->Import into Version Control->Share Project on GitHub出现如下错误:: 重点在最后一行Could not read from ...

  8. Stark组件 (一)

    Stark组件构建 1.启动所有app下的stark.py文件,的配置实现步骤 1.创建一个Django项目crm,并创建  app1 ,app2, stark 三个app 2.在crm 项目的set ...

  9. 【基础知识】【1】CDN

    正文: CDN:Content Delivery Network,内容分发网络.使用户访问离ta最近的资源服务器,优化访问速度 优点: 1,内容可以共享,不同站点的同一文件可以不用多次缓存 2,增加下 ...

  10. h5手机端禁止缩放问题

    最近测试html5页面,发现默认都允许用户缩放页面,或者在屏幕双击放大或缩小.即相当于这样设置 <meta name="viewport" content="wid ...