65,211
社区成员
发帖
与我相关
我的任务
分享#include <iostream>
using namespace std;
const int EmptyTOS = -1;
template <class T>
class stack
{
private:
T* Data;
int Capacity;
int TopOfStack;
public:
stack(int Size = 100)
{
Data = new T(Size);
Capacity = Size;
TopOfStack = EmptyTOS;
}
// ~stack(){delete[] Data;}
int IsEmpty();
int IsFull();
void MakeEmpty();
void Push(T x);
void Pop();
T Top();
T TopAndPop();
};
template <class T>
int stack<T>::IsEmpty()
{
return TopOfStack == EmptyTOS;
}
template <class T>
int stack<T>::IsFull()
{
return TopOfStack == Capacity-1;
}
template <class T>
void stack<T>::MakeEmpty()
{
TopOfStack = EmptyTOS;
}
template <class T>
void stack<T>::Push(T x)
{
if(!IsFull())
Data[++TopOfStack] = x;
else
{
printf("Out of space!");
exit(1);
}
}
template <class T>
void stack<T>::Pop()
{
if(!IsEmpty())
TopOfStack--;
else
printf("empty stack.");
}
template <class T>
T stack<T>::Top()
{
if(IsEmpty())
return NULL;
return Data[TopOfStack];
}
template <class T>
T stack<T>::TopAndPop()
{
if(IsEmpty())
return NULL;
return Data[TopOfStack--];
}
int Converter(char temp[]);
int main(void)
{
int i;
char temp[20];
i=Converter(temp);
for(int a=0; a<i; a++)
printf("%c",temp[a]);
return 0;
}
int Converter(char temp[])
{
char a;
stack<char> t(50);
int i;
i = 0;
printf("please input number:");
while( (a = getchar()) != '\n' )
{
if(isdigit(a))
{
temp[i++] = a;
}
if(a == '+' || a == '-' || a == '*' || a == '/' || a == '(' || a == ')')
{
if(t.IsEmpty())
{
t.Push(a);
}
else
{
while(1)
{
if(a == '(')
{
t.Push(a);
break;
}
if( (a == '+')||(a == '-') )
{
if(t.IsEmpty() || (t.Top() == '(') )
{
t.Push(a);
break;
}
temp[i++] = t.TopAndPop();
}
if( (a == '*')||(a == '/') )
{
if(t.Top() == '*' || t.Top() == '/')
{
temp[i++] = t.TopAndPop();
}
else
{
t.Push(a);
break;
}
}
while(a == ')')
{
if(t.Top() == '(')
{
break;
}
temp[i++] = t.TopAndPop();
}
if(a == ')' && t.Top() == '(')
{
t.Pop();
break;
}
}
}
}
}
while(!t.IsEmpty())
{
temp[i++] = t.TopAndPop();
}
return i;
}