причина, по которой это не работает на visual 2019 - PullRequest
0 голосов
/ 13 июля 2020

Я не думаю, что есть проблема с написанием грамматики или композиции. Я нарисовал его руками, несколько раз проверил и не обнаружил особых проблем. И я пробовал это много раз. Я пытался повторять снова и снова, но когда я использую версию Visual Studio 2019, он сразу же отключается без каких-либо выходных данных в окне выполнения. Я несколько раз гуглил, но не могу найти нужное решение. Я переустанавливаю визуальную программу или меняю дополнительные параметры? пожалуйста, дайте несколько решений

#include<iostream>
using namespace std;
#include<stdlib.h>

class Node {
    public:
    int data;
    Node * next;
};
class Stack {
    public:
    Node *top;
    Stack() {
        top->next = NULL;
    }
    void push(int data);
    int pop();
    void show();
};
void Stack::push(int data)
{
    Node *node = new Node;
    node->data = data;
    if (top->next == NULL) {
        node->next = NULL;
        top->next = node;
    }
    else {
        node->next = top->next;
        top->next = node;
    }
}
int Stack::pop()
{
    if (top-> next == NULL) {
        cout << "stack empty" << endl;
        return 0;
    }
    Node *temp = new Node;

    temp = top->next;
    int data = temp->data;
    top->next = temp->next;
    delete temp;
    return data;
}

void Stack::show() {
    Node *cur = new Node;
    cur = top-> next;
    while (cur != NULL) {
        cout << cur-> data << "->";
        cur = cur-> next;
    }

}
int main() {
    Stack s;
    s.push(5);
    s.push(1);
    s.push(3);
    s.show();
    cout << endl;
    cout << s.pop() << endl;

    s.show();
    return 0;
}

1 Ответ

0 голосов
/ 14 июля 2020

В вашем конструкторе

Stack() {
    top->next = NULL;
}

top никогда не было присвоено значение, поэтому top->next является ошибкой.

Мне кажется, что большая часть вашего кода будет исправлена если вы заменили top->next на top повсюду.

Здесь есть еще одна ошибка

void Stack::show() {
    Node *cur = new Node;
    cur = top-> next;

Вы назначаете cur новому узлу, а затем забываете об этом и назначаете его что-то еще в следующей строке. Просто сделайте это

void Stack::show() {
    Node *cur = top-> next;

(но top-> next должно быть просто top, как описано выше).

и такая же ошибка здесь

Node *temp = new Node;

temp = top->next;

почему назначьте новый узел для temp, если в следующей строке вы назначите что-то еще для temp?

Вот ваш код, все ошибки исправлены (я думаю)

class Stack {
    public:
    Node *top;
    Stack() {
        top = NULL;
    }
    void push(int data);
    int pop();
    void show();
};
void Stack::push(int data)
{
    Node *node = new Node;
    node->data = data;
    node->next = top;
    top = node;
}
int Stack::pop()
{
    if (top == NULL) {
        cout << "stack empty" << endl;
        return 0;
    }
    Node *temp = top;
    int data = temp->data;
    top = temp->next;
    delete temp;
    return data;
}

void Stack::show() {
    Node *cur = top;
    while (cur != NULL) {
        cout << cur-> data << "->";
        cur = cur-> next;
    }

}
...