栈实现表达式的计算
来源:互联网 发布:win7网络连接感叹号 编辑:程序博客网 时间:2024/05/16 07:28
之前写过这个的博客,但是觉得不太好,都是截屏,所以我就趁有时间整理了一下。(结果发现了一个天大的低级错误。)
我在实现栈的时候把析构函数写错了()所以就出现了以下的错误:
首先,运行的时候答案是对的,但是是内存错误表现:
然后我就进行单步调试:
一直执行到最后一句代码也没有错误,直到最后一个大括号就出现了......
所以说明可能是出现了内存泄露。
果然,析构函数我写成了:
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
调整一下,把delete []base放在最后就好啦。
以下是我完整的代码:
#include<assert.h>#include<iostream>using namespace std;template<class Type>class Stack{private: enum{STACK_DEFAULT_SIZE = 20}; Type *base; size_t capacity; size_t top;public: Stack(size_t sz = STACK_DEFAULT_SIZE) { capacity = sz > STACK_DEFAULT_SIZE? sz :STACK_DEFAULT_SIZE; base = new Type[capacity] ; top = 0; } ~Stack() { base = NULL; capacity = top = 0; delete []base; }public: bool isfull()const {return top >= capacity?true:false;} bool isempty()const {return top == 0?true:false;}public: void push( Type x) { if(!isfull()) { base[top++] = x; //top++; } } void pop() { if(!isempty()) { top--; } } Type gettop() { if(!isempty()) { return base[top-1]; } } void clear_stack() {top = 0;} size_t lenth()const {return top;} void show_stack()const { int i; for(i = top-1;i>= 0;i--) { cout<<base[i]<<" | "; } cout<<endl; }};int isp(char f){ switch(f) { case'@': case'#':return 0;break; case'(':return 1;break; case'*': case'/': case'%':return 5;break; case'+': case'-':return 3;break; case')':return 6;break; }}bool isdigit(char f){ switch(f) { case'(': case'*': case'/': case'%': case'+': case'-': case'@': case'#': case')':return false;break; default:return true;break; }}int icp(char f){ switch(f) { case'@': case'#':return 0;break; case'(':return 6;break; case'*': case'/': case'%':return 4;break; case'+': case'-':return 2;break; case')':return 1;break; }}float oper(float left,char op,float right){ float end; switch(op) { case'+':end = left + right;break; case'-':end = left - right;break; case'*':end = left * right;break; case'/':end = left / right;break; } return end;}void Change(Stack<char> ex,char *get){ char *p = get; char ch = '#'; char ch1 = '@'; Stack<char> temp; temp.push(ch); temp.push(ch1); while(!ex.isempty()&&temp.gettop()!='#') { if(isdigit(ex.gettop())) { *p = ex.gettop(); p++; ex.pop(); } else { if(isp(temp.gettop())<icp(ex.gettop())) { temp.push(ex.gettop()); ex.pop(); } else if(isp(temp.gettop())>icp(ex.gettop())) { *p = temp.gettop(); temp.pop(); ++p; } else if(isp(temp.gettop()) == icp(ex.gettop())) { temp.pop(); ex.pop(); } } }*p = '\0';temp.pop();}
#include"solvepoly.h"int main(){ Stack<char> old; Stack<char> opnow; Stack<float> finall; char zhong[20] = "1+2+3+4+5+6+7"; char *p = zhong; char hou[20]; char *h; int count = 0; float left; float right; float end; int count1 = 0; for(;*p!='\0';++p) { ++count; }//有十三个 --count;//最后一个下标为12 old.push('#'); for(;count>=0;--count) { old.push(zhong[count]); } Change(old,hou); h = hou; for(;*h!='\0';++h) { ++count1; } --count1;//count1 = 10 for(;count1>=0;--count1) { opnow.push(hou[count1]); } while(!opnow.isempty()) { if(isdigit(opnow.gettop())) { finall.push((float)(opnow.gettop()-'0')); opnow.pop(); } else { right = finall.gettop(); finall.pop(); left = finall.gettop(); finall.pop(); end = oper(left,opnow.gettop(),right); finall.push(end); opnow.pop(); } } cout<<finall.gettop()<<endl; finall.pop(); return 0;}
0 0
- 栈实现表达式的计算
- 栈实现表达式计算
- 表达式计算栈实现
- 栈实现后缀表达式的计算
- 使用栈实现整型表达式的计算
- 借助栈实现表达式的计算
- 通过栈实现算术表达式的计算
- 用栈来实现表达式的计算
- C++实现表达式的计算
- 用栈实现表达式计算
- 用栈实现表达式计算
- 表达式计算,输出后缀表达式,栈实现
- 完全利用栈实现表达式的计算问题
- 使用栈计算多项表达式的简单实现--java
- 借用栈实现表达式的转换与计算
- 【数据结构】用栈实现对后缀表达式的计算
- C++实现:用栈实现表达式计算
- 利用API 实现字符串表达式的计算
- c/c++ 关于数的基础知识
- 将一个类设置到另一个类的快捷方式
- cocos2d-x前端开发面试总结
- GitFlow
- 雅虎公司C#笔试题,看看你能解答多少?
- 栈实现表达式的计算
- 接口和抽象类的区别
- lintcode python ——最长公共前缀(LCP)
- 2017.2.12
- 如何使用Babel将ES6转码为ES5?
- VC++无法找到头文件或库函数.无法打开包括文件:“iostream”: No such file or directory
- C++对C函数的扩展
- java基础之java语法规则数据类型03
- Spring学习总结