`
sunxboy
  • 浏览: 2869970 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

使用数据结构实现计算器功能-java

阅读更多
java 代码
 
  1. package cacu;  
  2. /** 
  3.  * myejb6.0 CacuStack.java 
  4.  */  
  5.   
  6. /** 
  7.  * @author sunxboy 
  8.  * 
  9.  * 10:19:05 AM May 30, 2007 
  10.  */  
  11. public class CacuStack {  
  12.   
  13.     CacuNode top;  
  14.       
  15.     public CacuStack() {  
  16.         top = null;  
  17.     }  
  18.       
  19.     public boolean isEmpty() {  
  20.           
  21.         return top==null;  
  22.     }  
  23.       
  24.     public boolean push(int data) {  
  25.         CacuNode node = new CacuNode(data);  
  26.         if(isEmpty()) {  
  27.             top = node;  
  28.             return true;  
  29.         }else {  
  30.             node.next=top;  
  31.             top = node;  
  32.             return true;  
  33.         }  
  34.           
  35.     }  
  36.       
  37.     public int pop() {  
  38.         int data = top.data;  
  39.         top = top.next;  
  40.         return data;  
  41.     }  
  42.       
  43.     public static void main(String[] args) {  
  44.   
  45.         CacuStack stack=new CacuStack ();  
  46.         stack.push(1);  
  47.         stack.push(2);  
  48.         stack.push(3);  
  49.         stack.push(4);  
  50.         stack.pop();  
  51.         stack.pop();  
  52.         while(!stack.isEmpty())  
  53.         {  
  54.             System.out.println(stack.pop());  
  55.         }  
  56.     }  
  57. }  

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

java 代码
 
  1. /** 
  2.  *  
  3.  */  
  4. package cacu;  
  5.   
  6. /** 
  7.  * @author sunxboy 
  8.  *  
  9.  */  
  10. public class Cacu {  
  11.   
  12.     CacuStack cs;  
  13.   
  14.     public int cacu(String source) {  
  15.         cs = new CacuStack();  
  16.         for (int i = 0; i < source.length(); i++) {  
  17.             char ch = source.charAt(i);  
  18.             // 如果是数字  
  19.             if (ch <= '9' && ch >= '0') {  
  20.                 cs.push(Integer.parseInt(ch+""));   //注意这里不能用Integer.valueOf(ch);  
  21.             } else {  
  22.                 int num2 = cs.pop();  
  23.                 int num1 = cs.pop();  
  24.                 switch (ch) {  
  25.                 case '+':  
  26.                     cs.push(num1+num2);  
  27.                     break;  
  28.                 case '-':  
  29.                     cs.push(num1-num2);  
  30.                     break;  
  31.                 case '*':  
  32.                     cs.push(num1*num2);  
  33.                     break;  
  34.                 case '/':  
  35.                     cs.push(num1/num2);  
  36.                     break;  
  37.                   
  38.                 }  
  39.             }  
  40.         }  
  41.         return cs.pop();  
  42.     }  
  43.       
  44.     public static void main(String[] args) {  
  45.         InToPost post=new InToPost();  
  46.         Cacu cacu=new Cacu();  
  47.     //  (a+b*c)*(e+f+m+n*j)  
  48. //      System.out.println(post.doTrans("1+1"));  
  49. //      System.out.println(cacu.cacu(post.doTrans(("1+1"))));  
  50.         System.out.println(post.doTrans("(9+2*7)*(5+6+8+9*5)"));  
  51.         System.out.println(cacu.cacu(post.doTrans("(9+2*7)*(5+6+8+9*5)")));  
  52.           
  53.     }  


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

java 代码
 
  1. /** 
  2.  *  
  3.  */  
  4. package cacu;  
  5.   
  6. /** 
  7.  * @author sunxboy 
  8.  * 
  9.  */  
  10. public class CacuNode {  
  11.   
  12.     int data;  
  13.     CacuNode next;  
  14.     public CacuNode(int data) {  
  15.         this.data = data;  
  16.     }  
  17. }  

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

java 代码
 
  1. /** 
  2.  * struture Stack.java 
  3.  */  
  4. package cacu;  
  5.   
  6. /** 
  7.  * @author sunxboy 
  8.  * 
  9.  * 10:20:22 AM May 30, 2007 
  10.  */  
  11. public class Stack {  
  12.   
  13.     private Node top;  
  14.     public Stack() {  
  15.         top=null;  
  16.     }  
  17.       
  18.     public boolean push(char data) {  
  19.         Node newNode = new Node(data);  
  20.         if(isEmpty()) {  
  21.             top= newNode;  
  22.             return true;  
  23.         }else {  
  24.             newNode.next = top;  
  25.             top = newNode;  
  26.             return true;  
  27.         }  
  28.     }  
  29.       
  30.     public char pop(){  
  31.         char data = top.data;  
  32.         top =top.next;  
  33.         return data;  
  34.     }  
  35.       
  36.     public boolean isEmpty() {  
  37.         return top==null;  
  38.     }  
  39.       
  40.     public static void main(String[] args) {  
  41.         Stack stack=new Stack();  
  42.         stack.push('a');  
  43.         stack.push('b');  
  44.         stack.push('c');  
  45.         stack.push('d');  
  46.         stack.pop();  
  47.         stack.pop();  
  48.         while(!stack.isEmpty())  
  49.         {  
  50.             System.out.println(stack.pop());  
  51.         }  
  52.     }  
  53. }  

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

java 代码
 
  1. /** 
  2.  * struture Node.java 
  3.  */  
  4. package cacu;  
  5.   
  6. /** 
  7.  * @author sunxboy 
  8.  * 
  9.  * 10:20:13 AM May 30, 2007 
  10.  */  
  11. public class Node {  
  12.   
  13.     public char data;  
  14.     public Node next;  
  15.     public Node(char data) {  
  16.         this.data = data;  
  17.     }  
  18. }  

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

java 代码
 
  1. /** 
  2.  * struture InToPost.java 
  3.  */  
  4. package cacu;  
  5.   
  6. /** 
  7.  * @author sunxboy 
  8.  *  
  9.  * 10:20:04 AM May 30, 2007 
  10.  */  
  11. public class InToPost {  
  12.   
  13.     String output = "";  
  14.   
  15.     Stack stack;  
  16.   
  17.     public String doTrans(String source) {  
  18.   
  19.         stack = new Stack();  
  20.         for (int i = 0; i < source.length(); i++) {  
  21.             char ch = source.charAt(i);  
  22.             switch (ch) {  
  23.             case '+':  
  24.             case '-':  
  25.                 doOper(ch,1);  
  26.                 break;  
  27.             case '*':  
  28.             case '/':  
  29.                 doOper(ch,2);  
  30.                 break;  
  31.             case '(':  
  32.                 stack.push(ch);  
  33.                 break;  
  34.             case ')':  
  35.                 getParent();  
  36.                 break;  
  37.             default:   
  38.                 output = output + ch;  
  39.                 break;  
  40.             }  
  41.         }  
  42. //       将栈中全部取出  
  43.         while (!stack.isEmpty()) {  
  44.   
  45.             output = output + stack.pop();  
  46.         }  
  47.         return this.output;  
  48.     }  
  49.   
  50.     private void getParent() {  
  51.         while(!stack.isEmpty()) {  
  52.             char ch = stack.pop();  
  53.             if(ch=='('){  
  54.                 break;  
  55.             }else{  
  56.                 output=output+ch;  
  57.             }  
  58.         }  
  59.           
  60.     }  
  61.   
  62.     public void doOper(char ch1, int lev) {  
  63.   
  64.         while (!stack.isEmpty()) {  
  65.             char popch = stack.pop();  
  66.             if (popch == '(') {  
  67.                 stack.push(popch);  
  68.                 break;  
  69.             } else {  
  70.                 int lev2;  
  71.                 if (popch == '+' || popch == '-') {  
  72.                     lev2 = 1;  
  73.                 } else {  
  74.                     lev2 = 2;  
  75.                 }  
  76.   
  77.                 // 将栈中取出的与传入的比较优先级  
  78.                 if (lev > lev2) {  
  79.                     stack.push(popch); // 将低级别的放回去  
  80.                     break;  
  81.                 } else {  
  82.                     output = output + popch;  
  83.                 }  
  84.             }  
  85.   
  86.         }  
  87.         stack.push(ch1);    //将高级别放在外层  
  88.     }  
  89.       
  90.     public static void main(String[] args) {  
  91.         InToPost post=new InToPost();  
  92.         String temp="(a+b*c)*(e+f+m+n*j)";  
  93.         //abc*+ef+m+nj*+*  
  94.         System.out.println(post.doTrans(temp));  
  95.           
  96.     }  
  97.   
  98. }
分享到:
评论

相关推荐

    (数据结构实验)计算器--堆栈实现

    通过阅读和分析这些代码,我们可以深入理解堆栈在实际问题中的应用,以及如何用编程语言(可能是C++、Java、Python等)实现堆栈数据结构。 总之,这个实验是一个很好的机会,让学习者亲身体验数据结构如何影响算法...

    Java详细实现完整计算器功能

    可以使用栈数据结构来处理这个问题,先处理高优先级的运算符。 6. **命名空间(namespace)**: Java中没有像C++或C#那样的命名空间,但可以通过包(package)来实现类似的功能。在这个项目中,`Calculator`类可能...

    数据结构课程设计--计算器实现java代码

    在本项目中,"数据结构课程设计--计算器实现java代码"是一个典型的计算机科学与技术相关的课程设计任务,主要目标是利用Java编程语言实现一个计算器。这个任务涉及到许多关键的编程和数据结构概念,包括但不限于: ...

    Java 实现计算器 功能

    在Java编程语言中实现一个计算器功能是一项常见的任务,它涵盖了基础的编程概念,如控制流程、数据类型、函数以及类的设计。以下将详细介绍如何利用Java实现一个具备多种运算符计算能力的计算器。 首先,我们需要...

    简易计算器-java-gui

    - 数组与集合:虽然这个计算器项目可能不直接涉及数组或集合,但在更复杂的计算器设计中,可能需要使用这些数据结构来存储历史计算记录。 2. Java GUI(Java Swing): - JFrame:作为主窗口,承载所有的组件,如...

    经典计算器程序-java编写

    本主题将深入探讨一个用Java编写的经典计算器程序,这对于初学者来说是一个很好的学习资源,能够帮助他们理解基础的编程概念、控制流、数据类型以及面向对象编程的基本原则。 首先,让我们来了解一下计算器程序的...

    模拟微软计算器-java代码

    模拟微软计算器-java代码 本资源是一个使用 Java 语言开发的模拟...该算法使用了栈数据结构和面向对象编程的思想,实现了基本四则运算和科学计算的功能。该算法可以被应用于各种计算应用程序中,具有广泛的应用前景。

    JAVA计算器--源码

    在这里,你会看到如何声明变量,定义方法,以及使用控制流语句(如`if-else`,`for`循环和`while`循环)来实现计算功能。这些基本结构是所有Java程序的基础。 2. **运算符的使用**: - 计算器需要处理各种数学运算...

    数据结构课程设计---计算器

    在这个项目中,我们关注的是“计算器”的实现,这通常涉及到堆栈数据结构和后缀表达式(也称为逆波兰表示法)的应用。让我们深入探讨这些知识点。 首先,堆栈是一种线性数据结构,遵循“后进先出”(LIFO)的原则。...

    java数据结构的手机计算器

    Java数据结构在手机计算器中的应用主要体现在其内部算法和计算逻辑的设计上。在这个项目中,开发者巧妙地结合了数据结构的原理,如栈、队列等,以及良好的逻辑思维,来实现一个能够处理包括括号在内的复杂运算的手机...

    计算器功能的java实现

    在本文中,我们将探讨如何使用Java来实现一个仿Windows计算器的功能。这个计算器程序主要使用Swing和AWT库来构建用户界面,并通过ActionListener接口处理用户交互。我们将深入讨论以下几个关键知识点: 1. **Swing...

    加减乘除四则混合运算计算器-java

    在本项目中,我们主要探讨的是如何利用Java编程语言设计一个具有加减乘除四则混合运算功能的GUI(图形用户界面)计算器。这个计算器旨在模拟Windows操作系统中的标准计算器,提供用户友好的交互方式,使得非程序员也...

    计算器-java

    【计算器-java】项目是一个使用Java语言编写的全功能计算器程序,它涵盖了基本的数学运算以及可能的高级功能,如开方、对数、指数等。这个项目为学习者提供了深入理解Java编程语言以及面向对象设计原则的机会。下面...

    多项式计算器-简易版本-java

    计算器的运算部分,可能采用了栈数据结构来实现。栈是一种后进先出(LIFO)的数据结构,非常适合处理逆波兰表示法(Reverse Polish Notation,RPN)的计算问题。用户输入的多项式会被转换成RPN形式,然后通过栈进行...

    数据结构实验---LISP简易计算器

    在本数据结构实验中,我们将探索如何实现一个基于LISP的简易计算器。LISP,全称为“List Processor”,是一种古老而强大的编程语言,以其独特的语法和对递归的高度支持而闻名。这个实验将帮助我们深入理解数据结构,...

    java计算器的实现--ppt课件

    可以使用栈(Stack)数据结构来辅助处理,先计算高优先级的运算符。 7. **设计模式**:更高级的实现可能涉及命令模式,将每种运算封装为一个命令对象,计算器作为一个调用者,命令对象作为行为载体,这样可以使代码...

    计算器程序代码--java编写

    本文将深入探讨使用Java编写计算器程序的知识点,包括基础语法、控制结构、异常处理、用户界面设计等方面。 首先,让我们从基础开始。在Java中,程序的基本单位是类(Class),每个类都包含数据(属性)和行为...

    JAVA计算器代码 --一个比较好的代码

    7. **运算符优先级**:如果计算器支持嵌套运算,需要实现解析运算符优先级的逻辑,这可能涉及到栈数据结构。 8. **设计模式**:虽然这是一个简单的项目,但可以运用到单例模式(如果只允许一个计算器实例存在)或者...

    数据结构栈计算器

    在本项目"数据结构栈计算器"中,我们将深入探讨栈这一特殊的数据结构及其在实现计算器功能时的应用。栈是一种后进先出(LIFO)的数据结构,常用于解决逆序操作的问题,比如表达式求值。 首先,让我们来看看"中缀转...

Global site tag (gtag.js) - Google Analytics