计蒜客 数据结构 栈 stack_expression C++
2016-08-11 22:01
302 查看
//stack_expression //只处理加法和乘法的用栈实现的表达式求值,表达式长度为n //表达式输入的中间不能有空格 #include<iostream> #include<string> #include<cassert> using namespace std; template<class Type> class Stack { private: Type *urls; int max_size, top_index; public: Stack(int length_input) { urls = new Type[length_input]; max_size = length_input; top_index = -1; } ~Stack() { delete[] urls; } bool push(const Type &element) { if (top_index >= max_size - 1) { return false; } top_index++; urls[top_index] = element; return true; } bool pop() { if (top_index < 0) { return false; } top_index--; return true; } Type top() { assert(top_index >= 0); return urls[top_index]; } bool empty() { if (top_index < 0) { return true; } else { return false; } } }; bool precede(char a, char b) { if (a == '*') { return true; } else { return false; } } int operate(char theta, int a, int b) { if (theta == '+') { return a + b; } else { return a * b; } } void calc(Stack<int> &numbers, Stack<char> &operators) { int a = numbers.top(); numbers.pop(); int b = numbers.top(); numbers.pop(); numbers.push(operate(operators.top(),a,b)); operators.pop(); } int main() { int n; //n表示输入表达式的长度 cin>>n; //numbers栈存储数据,operators栈存储运算符 Stack<int> numbers(n); Stack<char> operators(n); string buffer; cin>>buffer; int i = 0; while(i<n){ //用[]表示其中的元素 if(isdigit(buffer[i])){ //把char类型的字符转化成int类型的数字,让字符减去‘0’即可。 numbers.push(buffer[i] - '0'); i++; } else{ //如果操作符号栈operators为空,或者当前运算符的优先级别高于栈顶的运算符 //运算符之间的比较 if(operators.empty() || precede(buffer[i], operators.top())) { operators.push(buffer[i]); i++; } else{ calc(numbers,operators); } } } //即使字符串扫描完成后,栈中还是可能会有没运算的操作符和数字 while(!operators.empty()){ calc(numbers,operators); } cout<<numbers.top()<<endl; return 0; }
相关文章推荐
- 例说数据结构&STL(五)——stack
- 数据结构-Stack和Queue
- 计蒜客 数据结构 队列——循环队列 C++
- 使用python实现数据结构 -- Stack(栈)
- 【数据结构】Stack 栈(更新时间:2016-04-13)
- 数据结构-stack基本操作
- PHP实现栈(Stack)数据结构
- Java数据结构 老版本的数据结构Vector、Stack
- 栈(Stack)——后进先出(LIFO)的数据结构(Data Structures)
- 数据结构-stack的基本操作
- ZOJ 1004 Anagrams by Stack(DFS+数据结构)
- 计蒜客 数据结构 链表 ——应用筛选简历 C++
- 基本数据结构之Stack类(一)
- 用Python实现stack数据结构
- 算法与数据结构3.1 stack
- 数据结构 之 栈(Stack)的实现及简单操作
- 基本数据结构:栈(stack)
- C# 数据结构 栈 Stack
- Java中各种常用数据结构的使用(Vector、Stack、LinkedList)
- 数据结构(Java语言)——Stack简单实现