我正在通过编写基于指针的动态堆栈在c ++中创建一个反向波兰表示法整数计算器,但是我在我的链表的每个元素上实现加减运算等操作时遇到了麻烦
以下是我的代码应该如何工作的背景:
方法说明:
构造函数:初始化对象,设置必要的内存。 析构函数:释放对象可能需要释放的所有内存。 clear():清空堆栈。 pop():删除并返回栈顶值(如果不为空)。如果在尝试弹出时堆栈为空,则引发异常。选择任何例外。 push(int):接受整数作为唯一参数,如果有足够的内存,则将其压入堆栈。 size():以整数形式返回堆栈的大小。 toString():返回堆栈的字符串表示形式。例如,如果堆栈包含8、3、2、5,顶部是8,则将返回[8、3、2、5],其格式完全相同。 计算器将需要支持以下操作:
我在main中的加/减/除/乘/模函数遇到麻烦。如何使用已创建的方法和构造函数执行此操作? 到目前为止,这是我的代码:
#include <iostream>
#include <list>
#include <string>
#include <algorithm>
#include <stack>
using namespace std;
struct Node
{
int data;
Node *next;
};
class MyStack
{
private:
Node *top;
public:
MyStack();
~MyStack();
void clear();
void push(int);
int pop();
int size();
string toString();
bool isEmpty();
int getNth(int); ////
};
int MyStack::size()
{
int count = 0; // Initialize count
Node* current = top; // Initialize current
while (current != NULL)
{
count++;
current = current->next;
}
return count;
}
int MyStack::getNth(int n)
{
Node* curr = top;
for (int i=0; i<n-1 && curr != NULL; i++)
curr = curr->next;
return curr->data;
}
MyStack::MyStack()
{
top = NULL;
};
MyStack::~MyStack()
{
while(!isEmpty())
{
pop();
}
};
void MyStack::push(int d)
{
Node *temp = new Node;
temp->data = d;
temp->next = top;
top = temp;
}
int MyStack::pop()
{
if(!isEmpty())
{
int value = top->data;
Node *oldtop = top;
top = oldtop->next;
delete oldtop;
return value;
} else
{
cout << "stack is empty"; //throw exception
exit(1);
}
}
void MyStack::clear()
{
top = NULL;
}
string MyStack::toString()
{
string result = "[";
bool needs_comma = false;
int n = size();
for (int i=n; i>=1; i--)
{
if (needs_comma) result += ", ";
needs_comma = true;
result += to_string(getNth(i));
}
result += "]";
return result;
};
bool MyStack::isEmpty()
{
return (top == NULL);
}
int main()
{
MyStack *s = new MyStack();
char choice;
string str;
while(cin >> str)
{
cout << str << endl;
if(str == "q")
break;
}
return 0;
}