- 浏览: 187802 次
- 性别:
- 来自: 自己输入城市...
文章分类
- 全部博客 (128)
- Java (13)
- Util (21)
- IO (1)
- Thread (4)
- Net (0)
- Design Patterns (0)
- Training (4)
- ----------------- (0)
- JS-1 (15)
- JS-3 (7)
- AJAX (3)
- AS (2)
- ------------------- (0)
- HTML (3)
- CSS (3)
- Art (15)
- -------------------- (0)
- RegExp (4)
- --------------------- (0)
- SQL (6)
- Servlet $ JSP (2)
- JDBC (2)
- ---------------------- (0)
- Bird (3)
- Setting (7)
- DL (4)
- PHP (4)
最新评论
-
durong11:
或者直接在函数的中加入:if(head.data.equals ...
我的Java单链表练习 -
durong11:
一种解释是:如果是从头结点insert 直接使用addFrom ...
我的Java单链表练习 -
老肥猴_vi:
谢谢。但是貌似insert函数( public boolean ...
我的Java单链表练习 -
niepeng880208:
支持
List转换成String数组 -
haohao-xuexi02:
EventHelp
幻灯片效果
package Stack.Calculate; import java.util.List; public class calculation { private String expression = null; private InfixToPostfix inf = null; private PostfixEval pos = null; public calculation(String s) { expression = s; expression += "@"; } public int calculat() { int result = 0; // 转化成后缀表达式 inf = new InfixToPostfix(expression); List<String> list = inf.toPostfix(); // 后缀表达式求值 pos = new PostfixEval(list); result = pos.evaluate(); return result; } public static void main(String[] args) { calculation c = new calculation("(300 + 200) / 100"); System.out.println(c.calculat()); // 5 } }
中缀转化成后缀表达式
package Stack.Calculate; import java.util.*; public class InfixToPostfix { private String infixExp = null; private List<String> postfixExp = new ArrayList<String>(); private Stack<Character> operStack = new Stack<Character>(); private StringBuffer numBuf = new StringBuffer(); private int priority(char op) { switch (op) { case '+': case '-': return 1; case '*': case '/': return 2; case '(': case '@': return 0; } return -1; } public InfixToPostfix(String s) { infixExp = s; } public List<String> toPostfix() { char ch, preChar; operStack.push('@'); for (int i = 0; i < infixExp.length();) { ch = infixExp.charAt(i); switch (ch) { case '+': case '-': case '*': case '/': preChar = operStack.peek(); while (priority(preChar) >= priority(ch)) { postfixExp.add("" + preChar); operStack.pop(); preChar = operStack.peek(); } operStack.push(ch); i++; break; case '(': operStack.push(ch); i++; break; case ')': char c = operStack.pop(); while (c != '(') { postfixExp.add("" + c); c = operStack.pop(); } i++; break; case '@': char c1; while (!operStack.isEmpty()) { c1 = operStack.pop(); if (c1 != '@') postfixExp.add("" + c1); } i++; break; case ' ': case '\t': i++; break; default: if (Character.isDigit(ch)) { while (Character.isDigit(ch)) { numBuf.append(ch); ch = infixExp.charAt(++i); } postfixExp.add("" + numBuf); numBuf = new StringBuffer(); } else { System.err.println("Illegal operator"); } } // switch end~ } return postfixExp; } // toPostfix end~ /* * public static void main(String[] args) { InfixToPostfix in = new * InfixToPostfix("50 + 2 * 3@"); List<String> list = in.toPostfix(); * System.out.println(list); } */ }
后缀表达式求值
package Stack.Calculate; import java.util.*; public class PostfixEval { private Stack<String> operandStack; private List<String> list; private boolean isOperator(String s) { return s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/"); } private int getOperand() { /* * if (operandStack.isEmpty()) throw new * ArithmeticException("PostfixEval: Too many operators"); */ return Integer.parseInt(operandStack.pop()); } private int compute(int left, int right, String item) { if (item.equals("+")) return left + right; else if (item.equals("-")) return left - right; else if (item.equals("*")) return left * right; else { if (right == 0) throw new ArithmeticException("PostfixEval: divide by 0"); return left / right; } } public PostfixEval(List<String> list) { this.list = list; this.operandStack = new Stack<String>(); } public int evaluate() { int left, right, expValue = 0; String item; for (int i = 0; i < list.size(); i++) { item = list.get(i); if (isOperator(item)) { right = getOperand(); left = getOperand(); expValue = compute(left, right, item); operandStack.push("" + new Integer(expValue)); } else { operandStack.push(item); } } /* * if (!operandStack.isEmpty()) throw new * ArithmeticException("PostfixEval: Too many operands"); */ return Integer.parseInt(operandStack.pop()); } }
发表评论
-
优先队列的实现
2008-05-11 05:00 973package Heap; import MyInter ... -
堆操作
2008-05-11 02:06 987Comparator接口 package MyInterfac ... -
HashSet 类的实现
2008-04-28 16:03 1196package Hash; import MyInter ... -
HashMap类的实现
2008-04-28 12:20 1540package Hash; import java.ut ... -
Hash类的实现
2008-04-27 15:10 839package Hash; import java.util ... -
散列表的设计-->线性探查法
2008-04-24 09:07 1929性能分析: 散列表中条目数的比例较小时,使用线性探查法的效率较 ... -
二叉排序树的TreeMap类设计
2008-04-23 23:29 1954Iterable接口 package MyInterface; ... -
java集合操作
2008-04-23 23:26 3026package Sets; import java.util ... -
二叉排序树的实现
2008-04-20 01:46 1671最适合用STree排序的是不可变类,不可变类的主要特征是它的对 ... -
InorderIterator类的实现
2008-04-07 08:41 956接口的定义: public interface MyItera ... -
BinaryTree遍历练习::表达式树
2008-04-05 14:35 1787package ExpressionTree; import ... -
二叉树遍历
2008-03-31 01:48 1097二叉树的高度 图(1) /**用后根遍历求二叉树的高度*/ ... -
有界队列
2008-03-26 00:14 1007package Queue; import java.uti ... -
链式队列的实现
2008-03-21 17:05 1356package Queue; import java.u ... -
Stack练习:: 十进制正整数转化成二进制
2008-03-17 16:09 1304include "stdio.h" in ... -
顺序栈的实现
2008-03-14 00:16 1090package Stack; /** * 顺序栈的实现 ... -
数据结构 Java循环双向链表
2008-03-08 17:33 3149■ 构造函数 每个构造函数都通过 this 来初始化链接域 p ... -
我的Java单链表练习
2008-03-06 19:14 3034package LinkedList; /** * ... -
我的ArrayList实现
2008-03-04 21:26 1379package ArrayList; /** * < ... -
[转]数据结构 用Java实现单链表
2007-11-28 12:56 17522007-08-24 页面自动刷 ...
相关推荐
在这个Java Stack练习中,我们将探讨如何将中缀表达式转换为后缀表达式,并利用栈的数据结构来简化计算。 首先,我们要了解栈这种数据结构。栈是一种具有“后进先出”(LIFO,Last In First Out)特性的数据结构,...
本主题“栈的应用-中缀-后缀”着重讲解如何利用栈来处理中缀表达式和后缀表达式的转换,这对于理解和实现计算算法至关重要。中缀表达式是我们日常生活中常见的数学公式形式,例如 \(2 + 3 * 4\),而后缀表达式,又称...
在本项目中,“java堆栈的应用--中缀表达式转换成后缀表达式和计算”具体涉及到了两个主要知识点:中缀表达式的转换与后缀表达式的计算。 1. **中缀表达式**:这是我们常见的数学表达式形式,如 `2 + 3 * 4`,其中...
### 中缀表达式转换为后缀表达式的详细解析 在计算机科学中,表达式的表示方式主要有三种:前缀、中缀和后缀。其中,中缀表达式是我们日常生活中最常用的数学表达式形式,如“3 + 4”。而后缀表达式(也称逆波兰...
此案例主要涉及到了三种自定义类的设计:`stack`用于管理运算符的顺序和优先级,`Middle_expressionToPost_expression`负责中缀表达式到后缀表达式的转换,而`Post_expression_value`则用于解析后缀表达式并计算其...
C++实现中,你可以使用`std::stack`容器来模拟栈,`std::string`来存储后缀表达式,同时使用`std::stringstream`来处理中缀表达式中的操作数和运算符。以下是一个简单的C++代码框架: ```cpp #include #include ...
通过编写程序,你可以输入一个中缀表达式,程序会将其转化为后缀表达式,并计算出最终结果。这不仅锻炼了你对算法的理解,还提高了处理实际问题的能力。 为了完成这个任务,你需要掌握以下几个关键点: - 栈数据...
本文将详细介绍如何将中缀表达式转换为后缀表达式,以及如何使用C++和栈数据结构实现这一过程。 首先,我们需要理解栈的基本概念。栈是一种线性数据结构,遵循“后进先出”(LIFO)原则。在处理中缀表达式时,栈...
在本文中,我们将讨论如何使用堆栈来实现中缀表达式到后缀表达式的转换,并计算后缀表达式的结果。这个过程通常应用于计算机科学中的表达式计算,特别是编程语言的解析和计算。 首先,我们要理解中缀表达式和后缀...
这里我们关注的是将中缀表达式转换为后缀表达式,也称为逆波兰表示法(Reverse Polish Notation, RPN)。中缀表达式是我们通常使用的数学表达式形式,其中操作符位于操作数之间,例如 "2 + 3"。而后缀表达式则是操作...
本文将详细讨论如何使用C++实现数据结构中的一个重要概念——中缀表达式转化为后缀表达式,也被称为逆波兰表示法。这个过程涉及到堆栈这一重要的数据结构。 中缀表达式是我们日常生活中常见的数学表达式形式,例如 ...
### C语言实现中缀表达式向后缀表达式转换 #### 概述 在计算机科学领域,表达式的处理是一项基础而重要的任务。表达式通常有三种形式:前缀(波兰)、中缀(标准数学表达式)和后缀(逆波兰)。本篇文章将详细探讨...
这里我们关注的是将中缀表达式转换为后缀表达式,也称为逆波兰表示法(Reverse Polish Notation, RPN)。这个过程是通过使用数据结构栈来完成的,对于理解和编写计算表达式的程序至关重要。下面我们将详细探讨这一...
#### 一、中缀表达式与后缀表达式简介 在计算机科学领域中,表达式的表示方式主要有三种:中缀表达式、前缀表达式和后缀表达式。 - **中缀表达式**:我们通常使用的数学表达式形式,如 `3 + 4`。 - **前缀表达式**...
/*程序由本人编译,并且经过多次测试,正确无误!目前该转换算法只支持数字在0至9之间的+-*/四元运算转换.*/ /**************程序员信息 ***************东北大学*******************东大很厉害**************** ...
在编程领域,中缀表达式、后缀表达式(也称为逆波兰表示法)和计算表达式是重要的概念,尤其在解析和计算数学表达式时。中缀表达式是我们日常生活中常用的运算符位于操作数之间的表达式形式,如 `2 + 3 * 4`。后缀...
后缀表达式将操作符放在它们的操作数之后,例如,上述中缀表达式在后缀表示法中为 \(2 3 4 \times +\)。 中缀表达式转后缀表达式的算法通常包含两个主要步骤:扫描和输出。首先,我们需要扫描整个中缀表达式,遇到...
本主题主要关注栈在表达式求解中的应用,特别是如何将中缀表达式转换为后缀表达式,并通过这种方式求解表达式的值。 中缀表达式是我们日常生活中常见的数学表达式形式,例如 \(2 + 3 * 4\),运算符位于操作数之间。...
后缀表达式 (Postfix Notation),比如前所述的中缀表达式转换为后缀表达式为:"A B C * - D +"。 四、实例 中缀:a+b*c-(d+e) 后缀:((a(bc)* )+ (de)+ )- 把括号去掉:abc*+de+- 前缀:-( +(a *(bc)) +(de)) 把...