В вашем конструкторе
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;
}
}