[栈的应用]动态顺序栈的实现、逆波兰表达式
来源:互联网 发布:java vbs音量 编辑:程序博客网 时间:2024/06/13 23:51
动态顺序栈的实现
#define N 5#define M 2template <class T>class Stack{public:Stack():_array(new T[N]), _capacity(N), _size(0){}void Push(const T& data){CheckCapacity();_array[_size++] = data;}void Pop(){if (!Empty()){_size--;}}T& Top(){return _array[_size-1];}T& Top()const{return _array[_size-1];}size_t Size()const{return _size;}size_t Capacity()const{return _capacity;}bool Empty()const{return _size == 0;}private:void CheckCapacity(){size_t size = Size();size_t capacity = Capacity();size_t newcapacity = capacity*M;if (_size >= _capacity){T* newarray = new T[newcapacity];for (size_t i = 0; i < size; i++){newarray[i] = _array[i];}delete[] _array;_array = newarray;_capacity = newcapacity;}}private:T* _array;size_t _capacity;size_t _size;};int main(){Stack<int> s;s.Push(10);s.Push(9);s.Push(8);s.Push(7);s.Push(6);s.Push(5);s.Push(4);cout << "栈顶元素为:" << s.Top() << endl;cout << "Size=" << s.Size() << endl;cout << "Capacity=" << s.Capacity() << endl;s.Pop();s.Pop();cout <<"栈顶元素为:"<< s.Top() << endl;cout << "Size=" << s.Size() << endl;cout << "Capacity=" << s.Capacity() << endl;system("pause:");return 0;}逆波兰表达式
#include <stack>#include <vector>//运算符bool Isopterator(const char ch){if (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '#')return true;return false;}//栈内运算符优先级int isp(char ch){switch (ch){case '#':return 0;case '(':return 1;case '+':case '-':return 3;case '*':case '/':case '%':return 5;case ')':return 6;default:cout << "算法不合理" << endl;}return 0;}//栈外预算符的优先级int icp(char ch){switch (ch){case '#':return 0;case ')':return 1;case '+':case '-':return 2;case '*':case '/':case '%':return 4;case '(':return 6;default:cout << "算法不合理" << endl;}return 0;}//将表达式转化为后缀表达式void CalcRPN(char* exp){stack<char> op;//操作符栈vector<char> str;op.push('#');//初始化操作符栈int i = 0;while (exp[i]){if (!Isopterator(exp[i]))//操作数{str.push_back(exp[i]);cout << exp[i];}else//操作符{cout << " ";char ch = op.top();if (icp(exp[i]) > isp(ch)){op.push(exp[i]);}else if (icp(exp[i]) < isp(ch)){op.pop();str.push_back(exp[i]);cout << ch;continue;}else{if (op.top() == '(')//继续读取下一个字符{op.pop();}}}++i;}while (op.top() != '#')//处理剩下的栈内操作符{char op1 = op.top();//栈顶元素str.push_back(op1);cout << op1;op.pop();}cout << endl;str.push_back(0);}
阅读全文
0 0
- [栈的应用]动态顺序栈的实现、逆波兰表达式
- 动态栈的实现,括号匹配问题,逆波兰表达式
- 数据结构 栈的应用 逆波兰表达式
- 栈的应用:逆波兰表达式
- 栈的应用—逆波兰表达式
- 栈的应用:逆波兰表达式求值
- 栈的应用--逆波兰表达式
- 栈的应用--中缀表达式转换为后缀表达式&逆波兰计算器的实现
- 数据结构----顺序栈实现逆波兰表达式(后缀表达式)求解
- android逆波兰表达式的应用(三) 逆波兰表达式的实现 ----- 小达
- android逆波兰表达式的应用(四)逆波兰表达式的计算实现 -----小达
- (学习java)顺序栈实现逆波兰表达式
- 【数据结构】栈的应用—逆波兰表达式
- 栈的应用(括号匹配、逆波兰表达式)
- 栈的应用:中缀表达式转化为后缀表达式(逆波兰表达式)
- 栈的应用 - 波兰式与逆波兰式
- 栈的应用二--四则运算表达式求值(逆波兰表示:后缀表达式)
- 栈(经典应用逆波兰表达式)
- 2016年12月第一题关于中间数
- 图像的掩膜操作
- 集群管理(8)——不能调用opencv3.1的问题
- 利用itext操作pdf从数据库导出大量数据--添加水印(四)
- poi的意思
- [栈的应用]动态顺序栈的实现、逆波兰表达式
- Pandas秘籍【第八章】
- spring-boot 性能监控
- C++之--继承
- spring资源加载-resource
- [BZOJ3651]网络通信(LCT)
- Contest RankList -- 2017年成都东软学院ACM冬季校赛(热身赛)
- shiro入门
- 【OpenCV入门教程之四】 ROI区域图像叠加&初级图像混合 全剖析