后缀表达式求值 java数据结构 java

您现在的位置:数据结构与抽象:Java语言版
数据结构与抽象:Java语言版
在线支付满48免快递费
作 者:Frank M.,Walter 著;,袁昱,译;译
ISBN:6出版时间:页数:783
包装:简裝本开本:26cm字数:
《数据结构与抽象:Java语言版》简介:  本书是为数据结构入门课程(通常课号是CS-2)而编写的教材。作者Frank Carrano和Walter Savitch在编写过程自始至终特别考虑到了Java与对象,为教师和学生提供了一种精心设计并经过教学实验的方式借助Java讲授ADT和对象。本书独特的设计将内容组织为相对较短的章。这种方式使学习更容易,并留出了教学的机动性。本书教给学生如何使用线性表、词典、栈、队列等等来组织数据。利用这些数据组织方式,学生们将学到算法设计的相关技术。书中的“编程提示”给读者额外的编程建议;大量的插图使讲解更形象生动;自测题贯穿各章,书末还给出了答案。本书适合作为数据结构的教学用书。
暂缺《数据结构与抽象:Java语言版》作者简介
《数据结构与抽象:Java语言版》目录:第1章& Java类&11.1& 对象与类&11.2& 在Java类中使用方法&31.2.1& 引用与别名&41.2.2& 实参与形参&51.3& 定义Java类&61.3.1& 方法定义&71.3.2& 传递实参&91.3.3& Name类的定义&121.3.4& 构造函数&131.3.5& toString方法&151.3.6& 静态的域与方法&161.4& 包&17第2章& 从已有类创建新类&232.1& 合成&232.2& 继承&272.2.1& 在构造函数中调用构造函数&302.2.2& 基类的私有域与私有方法&312.2.3& 方法的覆盖与重载&322.2.4& 保护访问&352.2.5& 多重继承&362.3& 类型兼容性与基类&362.3.1& Object类&372.3.2& 抽象类与抽象方法&392.4& 多态性&40第3章& 类的设计&503.1& 封装&503.2& 方法的说明&523.3& Java接口&553.3.1& 编写接口&553.3.2& 实现接口&573.3.3& 作为数据类型的接口&583.3.4& 接口实现中的类型转换&583.3.5& 扩展接口&593.3.6& 接口中的符号常量&603.3.7& 接口与抽象类的比较&613.4& 类的选择&633.4.1& 类的确定&643.4.2& CRC卡片&643.5& 类的复用&66第4章& 线性表&704.1& ADT线性表说明&704.2& 使用ADT线性表&784.3& Java类库:List接口&824.4& 使用线性表如同使用自动售货机&82第5章& 用数组实现线性表&875.1& 使用定长数组实现ADT线性表&875.1.1& 类比&875.1.2& Java实现&895.2& 使用动态扩展数组实现ADT线性表&965.2.1& 扩展数组&975.2.2& 线性表新的实现&985.3& 使用向量实现ADT线性表&1005.4& 用数组实现ADT线性表的优缺点&1045.5& Java类库&& ArrayList类&& Serializable接口&105第6章& 用链表实现线性表&1086.1& 链表&& 创建一个链表&& 创建另一个链表&& 仍创建一个链表&1136.2& Node类&1166.3& 使用链表实现ADT线性表&& 在线性表的末端插入元素&& 在线性表的指定位置插入元素&& 私有方法getNodeAt&& 方法remove&& 方法replace&& 方法getEntry&& 方法contains&& 其余方法&& 使用具有设置与获取方法的Node类&1316.4& 表尾引用&1316.5& 用链表实现ADT线性表的优缺点&1366.6& Java类库:LinkedList类&136第7章& 迭代器&1397.1& 迭代器是什么&& 基本迭代器&& 对ADT进行修改的迭代器方法&1437.2& 内部迭代器的实现&1457.3& 将迭代器本身实现为一个类&& 外部迭代器&& 内部类迭代器&154第8章& Java的迭代器接口&1608.1& Iterator接口&1608.2& 实现Iterator接口&& 基于链表实现&& 基于数组实现&1658.3& ListIterator接口&1688.4& 基于数组实现ListIterator接口&1748.5& Java类库:重温ArrayList和LinkedList&181第9章& 算法的效率&1849.1& 动机&1849.2& 度量算法的效率&1869.3& 形式化&1929.4& 效率的图形表示&1949.5& ADT线性表不同实现的效率&& 基于数组实现&& 基于链表实现&& 比较上述实现&201第10章& 递归&20610.1& 何谓递归&20610.2& 跟踪递归方法&21110.3& 有返回值的递归方法&21310.4& 递归处理数组&21610.5& 递归处理链表&21810.6& 递归方法的时间效率&& countDown的时间效率&& 计算xn的时间效率&22210.7& 困难问题的简单解法&22310.8& 简单问题的拙劣解法&22810.9& 尾递归&23010.10& 协同递归&232第11章& 排序入门&23811.1& 选择排序&& 迭代选择排序&& 递归选择排序&& 选择排序的效率&24311.2& 插入排序&& 迭代插入排序&& 递归插入排序&& 插入排序的效率&& 链表的插入排序&24811.3& 希尔排序&& Java代码&& 希尔排序的效率&25411.4& 算法比较&255第12章& 更快的排序算法&25912.1& 归并排序&& 数组的归并&& 递归归并排序&& 归并排序的效率&& 迭代归并排序&& Java类库中的归并排序&26412.2& 快速排序&& 快速排序的效率&& 创建划分&& 快速排序的Java代码&& Java类库中的快速排序&27212.3& 基数排序&& 基数排序的伪代码&& 基数排序的效率&27412.4& 算法比较&275第13章& 有序表&28013.1& ADT有序表的说明&28013.2& 链表实现&& add方法&& 链表实现的效率&29113.3& 使用ADT线性表的实现&292第14章& 继承与线性表&29914.1& 使用继承实现有序表&29914.2& 基类的设计&30214.3& 有序表的一种高效实现&306第15章& 可变对象、不可变对象及可克隆对象&31015.1& 可变对象与不可变对象&& 同伴类&& 使用继承构建同伴类&31515.2& 可克隆对象&31715.3& 克隆体的有序表&32315.4& 克隆数组&32515.5& 克隆链表&327第16章& 查找&33416.1& 问题描述&33416.2& 查找无序数组&& 迭代顺序查找无序数组&& 递归顺序查找无序数组&& 顺序查找数组的效率&33816.3& 查找有序数组&& 顺序查找有序数组&& 折半查找有序数组&& Java类库:方法binarySearch&& 折半查找数组的效率&34316.4& 查找无序链表&& 迭代顺序查找无序链表&& 递归顺序查找无序链表&& 顺序查找链表的效率&34716.5& 查找有序链表&& 顺序查找有序链表&& 折半查找有序链表&34816.6& 查找方法的选择&348第17章& 词典&35217.1& ADT词典的说明&& Java接口&& 迭代器&35617.2& 使用ADT词典&& 电话号码簿&& 词频&& 词的索引&36317.3& Java类库:Map接口&365第18章& 词典的实现&36818.1& 基于数组的实现&& 元素&& 基于数组的无序词典&& 基于数组的有序词典&37118.2& 基于向量的实现&37518.3& 基于链表的实现&& 元素&& 基于链表的无序词典&& 基于链表的有序词典&379第19章& 用散列实现词典&38519.1& 什么是散列&38619.2& 散列函数&& 计算散列码&& 将散列码压缩为散列表的索引&39119.3& 处理冲突&& 线性探测开放定址&& 二次探测开放定址&& 双散列开放定址&& 开放定址的潜在问题&& 链地址&39819.4& 效率&& 装填因子&& 开放定址的开销&& 链地址的开销&40319.5& 再散列&40419.6& 处理冲突的各方案比较&40519.7& 使用散列的词典实现&& 散列表中的元素&& 数据域与构造函数&& 方法getValue、remove及add&& 迭代器&41519.8& Java类库:类HashMap&416第20章& 栈&42120.1& ADT栈的说明&42120.2& 利用栈处理代数表达式&& 检查中缀代数表达式中括号是否平衡&& 将中缀表达式转化为后缀表达式&& 后缀表达式求值&& 中缀表达式求值&43920.3& 程序栈&44120.4& 使用栈代替递归&44320.5& Java类库:类Stack&445第21章& 栈的实现&44921.1& 基于链表的实现&44921.2& 基于数组的实现&45221.3& 基于向量的实现&456第22章& 队列、双端队列及优先队列&46022.1& ADT队列的说明&46022.2& 使用队列模拟排队&46422.3& 使用队列计算股份销售的资本收益&47022.4& ADT双端队列的说明&47322.5& 使用双端队列计算股份销售的资本收益&47522.6& ADT优先队列的说明&47622.7& 使用优先队列计算股份销售的资本收益&477第23章& 队列、双端队列及优先队列的实现&48123.1& 基于链表实现队列&48123.2& 基于数组实现队列&& 循环数组&& 含有一个不用位置的循环数组&48823.3& 基于向量实现队列&49323.4& 基于循环链表实现队列&49523.5& 基于双向链表实现双端队列&50023.6& 实现优先队列可用方法&504第24章& 树&50724.1& 树的概念&& 层次化的组织&& 树的术语&50924.2& 树的遍历&& 二叉树的遍历&& 树的遍历&51524.3& 树的Java接口&& 所有树的接口&& 二叉树接口&51724.4& 二叉树举例&& 表达式树&& 决策树&& 二叉查找树&& 堆&52624.5& 树举例&& 语法分析树&& 博弈树&530第25章& 树的实现&53425.1& 二叉树的节点&& 节点的接口&& BinaryNode的实现&53625.2& ADT二叉树的实现&& 创建基本二叉树&& 方法privateSetTree&& 访问者与修改者方法&& 计算高度与统计节点&& 遍历&54425.3& 表达式二叉树的实现&54925.4& 树&& 树的节点&& 用二叉树表示树&551第26章& 二叉查找树的实现&55526.1& 预备知识&& 二叉查找树接口&& 相同的元素&& 开始类定义&55926.2& 查找与提取&56026.3& 遍历&56126.4& 插入元素&& 迭代实现&& 递归实现&56426.5& 删除元素&& 删除叶子节点中的元素&& 删除有一个孩子的节点中的元素&& 删除有两个孩子的节点中的元素&& 删除根节点中的元素&& 迭代实现&& 递归实现&57926.6& 操作的效率&& 平衡的重要性&& 插入节点的顺序&58426.7& ADT词典的实现&585第27章& 堆的实现&59127.1& 再论ADT堆&59127.2& 用数组表示堆&59227.3& 插入元素&594
商品问答(0条)
暂时没有问答
本期限时抢购
抢购价:?3.201.0折
同类图书热卖榜
&29.3061折
&11.9041折
&86.4080折
&16.2060折
&41.4060折
&41.4060折
&32.8063折
&71.2080折
&16.2060折
&21.4065折
淘书推荐特价好书
&14.8038折
&14.1038折
&17.3048折
&12.5050折
&28.3048折
&10.4036折
&16.1035折
&14.0040折数据结构 257万源代码下载 -
11:26:07 上传
说明: 用VB操作Excel详解,实现VB与EXCEL的无缝连接.
开发平台:Visual Basic | 大小:<font color=#KB | 下载<font color=#次
09:19:40 上传
说明:判断101-200之间有多少个素数,并输出所有素数。
开发平台:Visual C++ | 大小:<font color=#KB | 下载<font color=#次
09:14:37 上传
说明:输入三个大小不同的数值,按这三个数由小到大输出。
开发平台:Visual C++ | 大小:<font color=#KB | 下载<font color=#次
04:49:10 上传
说明:Fibonaci series using recursive method.
开发平台:Visual C++ | 大小:<font color=#KB | 下载<font color=#次
08:23:13 上传
说明:创建动态数列,可以进行数据统计,分类数据,查找质数。使用数据结构中的筛选法来进行数据分析。
开发平台:C++ | 大小:<font color=#KB | 下载<font color=#次
14:14:59 上传
说明:一些针对基础薄弱者的简单数据结构编程算法题目。用于提高初学者能力。
开发平台:C# | 大小:<font color=#KB | 下载<font color=#次
13:10:22 上传
说明:通过非线性映射将原始空间的向量映射到高维空间,进而提取特征的方法 核主成分分析法
开发平台:matlab | 大小:<font color=#0KB | 下载<font color=#次
22:42:15 上传
说明:多元多项式的基本操作,包括加减法。命令行解析,直接输入数学式即可
开发平台:Visual C++ | 大小:<font color=#3KB | 下载<font color=#次
20:39:09 上传
说明:&#61620
1.编写AVL树的判别程序,并判断一个二叉搜索树是否为AVL树
2.实现AVL树,其上的基本操作为:Search,Insert,Delete,和Ascend
3.基本操作的动态演示
A.实现带索引的AVL搜索树,其上的基本操作:
Search,Insert,Delete,IndexSearch,IndexDelete,Ascend
基本可以说是很完美的程序
开发平台:Java | 大小:<font color=#9KB | 下载<font color=#次
20:36:44 上传
说明:&#61620
1.编写AVL树的判别程序,并判断一个二叉搜索树是否为AVL树
2.实现AVL树,其上的基本操作为:Search,Insert,Delete,和Ascend
3.基本操作的动态演示
A.实现带索引的AVL搜索树,其上的基本操作:
Search,Insert,Delete,IndexSearch,IndexDelete,Ascend
开发平台:Visual C++ | 大小:<font color=#7KB | 下载<font color=#次
20:36:08 上传
说明:将二叉树序列化 并且重建,序列化时用#代替叶子节点的空孩子节点,详细地写满了注释。
开发平台:Java | 大小:<font color=#KB | 下载<font color=#次
20:32:17 上传
说明:可求二叉树的镜像树,详细地写满了注释,。。运行时更改包名。
开发平台:Java | 大小:<font color=#KB | 下载<font color=#次
20:27:28 上传
说明:判断是否是平衡二叉树。导入eclipse时package classTwo 更改包名,
开发平台:Java | 大小:<font color=#KB | 下载<font color=#次
14:36:21 上传
说明:C++线性表,编程,有着最简单的初级入门的C++线性表的程序,通俗易懂
开发平台:Visual C++ | 大小:<font color=#KB | 下载<font color=#次
21:20:54 上传
说明:文件里包含了几乎所有数据结构里的api,包括堆栈线性表 链表等并自行编写的完整的api
开发平台:C-C++ | 大小:<font color=#7KB | 下载<font color=#次
16:36:38 上传
说明:通过调整堆中各元素的位置的方式,实现堆排序,并且按序输出
开发平台:Visual Basic | 大小:<font color=#KB | 下载<font color=#次
16:32:50 上传
说明:通过链表的方式,实现了两种不同方式下的多项式相加
开发平台:Visual Basic | 大小:<font color=#KB | 下载<font color=#次
16:28:58 上传
说明:建立二叉树,并且按照非递归的方法实现前序遍历,后序遍历和中序遍历
开发平台:Visual Basic | 大小:<font color=#KB | 下载<font color=#次
16:26:20 上传
说明:可以根据自己输入来建立平衡二叉树,并且根据左旋,右旋等方式实现插入删除功能
开发平台:Visual Basic | 大小:<font color=#KB | 下载<font color=#次
00:26:05 上传
说明:Java Dizgi E&#351 leme Algoritmalar&#305
Apostolico-Crochemore algoritmas&#305
开发平台:Java | 大小:<font color=#KB | 下载<font color=#次
19:06:46 上传
说明:实现了二叉树的重构,根据二叉树的顺序可以重构一颗二叉树,输入先序、后序遍历的结构,重构出一颗二叉树。
开发平台:C-C++ | 大小:<font color=#KB | 下载<font color=#次
19:04:34 上传
说明:实现了链表排序算法,采用归并排序的思想,从链表的建立到最后实现链表排序都完整的实现了功能
开发平台:C-C++ | 大小:<font color=#KB | 下载<font color=#次
16:31:05 上传
说明:普通排序源码,包含冒泡法排序,插入排序,选择排序和希尔排序;
开发平台:Java | 大小:<font color=#KB | 下载<font color=#次
10:25:15 上传
说明:c++与数据结构基础一书完整课后习题答案,按章节分类排版,简单易理解,运行无错误。
开发平台:Visual C++ | 大小:<font color=#KB | 下载<font color=#次
08:49:33 上传
说明:c++实现单链表的CRUD操作,通俗易懂,简单名了
开发平台:C-C++ | 大小:<font color=#KB | 下载<font color=#次
22:58:53 上传
说明:复制具有随机域节点的链表,
导入eclipse时要改包名package classOne
开发平台:Java | 大小:<font color=#KB | 下载<font color=#次
22:57:06 上传
说明:通过2个队列来模拟栈,
运行导入eclipse时要改包名package classOne
开发平台:Java | 大小:<font color=#KB | 下载<font color=#次
22:55:30 上传
说明:二叉搜索树 转为 双向链表,
导入eclipse时要改包名package classOne
开发平台:Java | 大小:<font color=#KB | 下载<font color=#次
22:51:15 上传
说明:链表中每K个节点 逆置。..导入eclipse时要改包名package classOne
开发平台:Java | 大小:<font color=#KB | 下载<font color=#次
18:06:09 上传
说明:堆排序是一种比较优化的排序方法,特备是在只是找一串数字中前几个最大最小值时更显示它的优势。这个程序的堆排序包括每一轮的堆排序的调整以及最终的排序结果的显示。
开发平台:Visual C++ | 大小:<font color=#KB | 下载<font color=#次
[数据结构] 合计37288个 |
&页次: 1/1243页 30/页1247人阅读
数据结构(4)
java(33)
算术表达式
& &1 将中缀表达式转换成后缀表达式
& & 2 计算后缀表达式的&#20540;
& &后缀表达式的求&#20540;就容易多了
& &按顺序将操作数入栈, 遇到操作符时,从栈中提出两个操作数,用操作符将其执行运算,将结果入栈
import java.util.S
import java.util.regex.P
import java.util.regex.M
import java.util.M
import java.util.HashM
public class ArithmeticExpressionEvaluation {
private static Stack&Character& theS
private static char charKey=(char)97;
static Map&Character,String&
hashMap=new HashMap&Character,String&();
private static S
public static void main(String[] args) {
if(args.length&1) {
System.out.println(& please enter the input arithmetic expression string
that needs to be evaluated.&+
legal operators include &#39;+&#39;, &#39;-&#39;,&#39;*&#39; and &#39;/&#39; ,and you can also add &#39;(&#39; and &#39;)&#39; .&+
&all numbers must above zero, the program doesn&#39;t support negative values now &
System.exit(0);
System.out.println(&the original input is :&+args[0]);
String internalStr=processBeforeEvaluation(args[0]);
System.out.println(&the internal expression is :&+internalStr);
String postfixStr= translateToPostfixExpression(internalStr);
System.out.println(&the postfix expression is :&+postfixStr);
double result=evaluatePostfixExpression(postfixStr);
System.out.println(&the final result is :&+result);
private static String processBeforeEvaluation(String input) {
Matcher pile(&[^0-9.*+/\\()-]&).matcher(input);
if(legal.find()) {
System.out.println(&Please enter legal arithmetic expression string.&);
System.exit(0);
StringBuffer sbuf = new StringBuffer();
Matcher pile(&\\d+(\\.\\d+)?&).matcher(input);
while(m.find()) {
String temp=m.group(0);
hashMap.put(charKey,temp);
m.appendReplacement(sbuf,charKey+&&);
charKey=(char)(charKey+1);
m.appendTail(sbuf);
return sbuf.toString();
private static String translateToPostfixExpression(String input) {
theStack=new Stack&Character&();
result=&&;
for(int j=0; j&input.length(); j++) {
char ch=input.charAt(j);
switch(ch) {
case &#39;+&#39;:
case &#39;-&#39;:
case &#39;*&#39;:
case &#39;/&#39;:
gotOper(ch);
case &#39;(&#39;:
theStack.push(ch);
case &#39;)&#39;:
gotParen(ch);
//end switch
} //end for loop
while(!theStack.empty()) {
result+=theStack.pop();
private static void gotOper(char opThis) {
while(!theStack.empty()) {
char opTop=theStack.pop();
if(opTop==&#39;(&#39;) {
theStack.push(opTop);
if(opThis==&#39;*&#39;||opThis==&#39;/&#39;) {
//如果是本次是乘除,栈里最多可弹出一个乘号
if(opTop==&#39;+&#39;||opTop==&#39;-&#39;) {
theStack.push(opTop);
result+=opT
//如果是本次是加减,栈里最多可弹出一次乘除,再加一次加减
result+=opT
} //end else
}//end while
theStack.push(opThis);
}//end gotOper()
private static void gotParen(char ch) {
while(!theStack.empty()) {
char chx=theStack.pop();
if(chx==&#39;(&#39;)
} //end while
private static double evaluatePostfixExpression(String input) {
System.out.println(&the content of the hashMap is :&+hashMap);
double num1,num2,interAns=0;
String str1,str2;
theStack=new Stack&Character&(); //重置栈,后缀表达式求值是将数字放入栈中
for(int j=0; j&input.length(); j++) {
ch=input.charAt(j);
if(ch&=97) {
//j代表一个double型的数字
theStack.push(ch);
str2 =hashMap.get(theStack.pop());
str1=hashMap.get(theStack.pop());
num2=Double.parseDouble(str2);
num1=Double.parseDouble(str1);
switch(ch) {
case &#39;+&#39;:
interAns=num1+num2;
case &#39;-&#39;:
interAns=num1-num2;
case &#39;*&#39;:
interAns=num1*num2;
case &#39;/&#39;:
interAns=num1/num2;
interAns=0;
} //end switch
hashMap.put(charKey,interAns+&&);
theStack.push(charKey);
charKey=(char)(charKey+1);
} //end else
} //end for loop
str1=hashMap.get(theStack.pop());
interAns=Double.parseDouble(str1);
} catch(Exception e) {
System.out.println(&please enter legal numbers!&);
e.printStackTrace();
return interA
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:39674次
排名:千里之外
原创:42篇
(2)(3)(7)(2)(10)(4)(3)(12)(5)Java中的表达式求值
[问题点数:40分,结帖人lyqin2008]
Java中的表达式求值
[问题点数:40分,结帖人lyqin2008]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2012年8月 总版技术专家分月排行榜第三2012年7月 总版技术专家分月排行榜第三
2014年8月 高性能开发大版内专家分月排行榜第一2013年11月 高性能开发大版内专家分月排行榜第一2012年12月 Java大版内专家分月排行榜第一2012年11月 Java大版内专家分月排行榜第一2012年10月 Java大版内专家分月排行榜第一2012年9月 Java大版内专家分月排行榜第一2012年8月 Java大版内专家分月排行榜第一2012年7月 Java大版内专家分月排行榜第一2012年6月 Java大版内专家分月排行榜第一2012年5月 Java大版内专家分月排行榜第一2012年4月 Java大版内专家分月排行榜第一2012年3月 Java大版内专家分月排行榜第一2012年2月 Java大版内专家分月排行榜第一2012年1月 Java大版内专家分月排行榜第一
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 表达式求值 数据结构 的文章

 

随机推荐