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. Codeforces 841 D - Leha and another game about graph

    D - Leha and another game about graph 思路:首先,如果所有点的度数加起来是奇数,且没有-1,那么是不可以的. 其他情况都可以构造,我们先dfs出一个生成树,然后从 ...

  2. python标准库中socket模块详解

    包含原理就是tcp的三次握手 http://www.lybbn.cn/data/datas.php?yw=71 这篇讲到了socket和django的联系 https://www.cnblogs.co ...

  3. Superclass和Constructor Chaining

    A subclass inherits accessible date fields and methods from its superclass. Does it inherit construc ...

  4. TCHART类型

    private Steema.TeeChart.Styles.Pie pieSeries1; private Steema.TeeChart.Styles.Pie pieSeries2; privat ...

  5. 【转】 多线程之linux线程调度策略

    转自:http://blog.csdn.net/byperseverance/article/details/44522731 Linux线程的调度策略分为3个:SCHED_OTHER,SCHED_F ...

  6. Bash Shell 注释多行的几种方法(转)

    很实用的小技巧. 我们shell脚本写好了,但是想一行一行测试,怎么办. 笨方法:每行前面加一个 #,有时候我们原脚本里面本来就有注释,所以想再恢复的时候就麻烦了. Bash Shell 注释多行的几 ...

  7. 练习 配置WCF服务

    http://blog.csdn.net/suntanyong88/article/details/8203572   目录(?)[+] 1OrderTrackWindowsKZT   控制台应用 程 ...

  8. Confluence 6 归档一个空间

    当你认为一个空间不再需要实时进行编辑,但你还希望在后面某个时候能够对空间重新进行访问编辑的时候,你可以对空间进行归档.归档一个空间,这样你可以让你归档的空间让最少的人能看见,但是你的空间还是可以在 C ...

  9. pytorch构建自己设计的层

    下面是如何自己构建一个层,分为包含自动反向求导和手动反向求导两种方式,后面会分别构建网络,对比一下结果对不对. -------------------------------------------- ...

  10. gitlab 集成Jenkins

    项目:使用git+jenkins实现持续集成 开始构建  General  源码管理 我们安装的是Git插件,还可以安装svn插件  我们将git路径存在这里还需要权限认证,否则会出现error  我 ...