如何将实现为堆栈类的链表的元素的模数相加,相减,相乘,相除和相乘?

时间:2019-06-26 09:54:41

标签: c++ data-structures linked-list stack singly-linked-list

我正在通过编写基于指针的动态堆栈在c ++中创建一个反向波兰表示法整数计算器,但是我在我的链表的每个元素上实现加减运算等操作时遇到了麻烦

以下是我的代码应该如何工作的背景:

方法说明:

构造函数:初始化对象,设置必要的内存。 析构函数:释放对象可能需要释放的所有内存。 clear():清空堆栈。 pop():删除并返回栈顶值(如果不为空)。如果在尝试弹出时堆栈为空,则引发异常。选择任何例外。 push(int):接受整数作为唯一参数,如果有足够的内存,则将其压入堆栈。 size():以整数形式返回堆栈的大小。 toString():返回堆栈的字符串表示形式。例如,如果堆栈包含8、3、2、5,顶部是8,则将返回[8、3、2、5],其格式完全相同。 计算器将需要支持以下操作:

  • :添加
  • :减法
  • :乘法 /:除 %:模量 ? :使用toString()方法将堆栈的当前内容打印到屏幕上。 ^:弹出堆栈顶部,仅显示弹出的值。 ! :退出计算器。 计算器将连续读取输入,直到!输入。它可以读取任意数量的令牌作为输入(请参见下文)。如果堆栈中没有足够的整数来执行计算,则#Not参数不足。应该显示。如果输入了除整数或支持的操作以外的任何内容,则错误消息#Invalid input。应该显示,而不会中断特定输入行的其余操作。

我在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;


}

以下是我的预期输出以及程序应如何运行的图片: run 1

run 2 run 3

0 个答案:

没有答案