#include<iostream>
#include<cstdlib>
using namespace std;
struct node
{
int data; //data
node *next; //link
};
class stack // stack using linked list
{
public:
node *top; // top element of stack
public:
stack()
{
top= NULL;
}
void push(int value)
{
node *temp = new node; // create a new node
temp-> data = value;
temp-> next = NULL;
if(top==NULL) // stack is empty
{
top=temp;
temp=NULL;
}
else
{
temp-> next = top;
top=temp;
temp=NULL;
}
}
//template <class X>
void pop()
{
if(top==NULL)
{
cout<<"nStackOverflow "<<endl;
cout<<"Program Terminated "<<endl;
exit (0);
}
else
{
top=top->next;
}
}
void display()
{
node *temp=new node;
temp=top;
while(temp!=NULL)
{
cout<<temp->data<<" ";
temp = temp-> next;
}
while(top==NULL)
{
cout<<"nStack is Empty "<<endl;
exit (0);
}
}
};
int main()
{
stack a;
a.push(5);
a.display();
a.push(10);
a.display();
a.pop();
a.pop();
a.push(20);
a.display();
a.pop();
a.display();
return 0;
}
此代码的输出为 5 10 5 20 堆栈为空。
哪个是错误的输出,正确的输出是 5 10 20 堆栈为空。.
有人告诉我为什么会发生此错误。
代码的引用:[在 c++ 中使用模板和链表实现堆栈
不,输出是正确的。
a.push(5);
a.display();
这将显示第一个5
。
a.push(10);
a.display();
5
仍在堆栈上,因此现在显示10
,然后显示5
。
a.pop();
a.pop();
a.push(20);
a.display();
现在所有内容都被删除,20
被添加并显示,所以这应该只显示20
.
然后空堆栈打印
a.pop();
a.display();
所以放在一起,它应该显示5 10 5 20 Stack is Empty
.
a.push(5); // Stack: 5
a.display(); // Output: new: 5
a.push(10); // Stack: 10 5
a.display(); // Output: old: 5 new: 10 5
a.pop(); // Stack: 5
a.pop(); // Stack: empty
a.push(20); // Stack: 20
a.display(); // Output: old: 5 10 5 new: 20
a.pop(); // Stack: empty
a.display(); // Output: old: 5 10 5 20 new:
stack() { top= NULL; // use initializ list instead of assignment // in constructors body }
-->
stack() : top{ nullptr } {}
void pop() { if (top == NULL) { cout << "nStackOverflow " << endl; cout << "Program Terminated " << endl; exit(0); // don't use exit() in C++ if there are other ways! } else { top = top->next; // the memory top pointed to // before the assignment leaks! } }
-->
void pop()
{
if (!top) {
cout << "Pop on empty stack!n";
return;
}
node *old_top = top;
top = top->next;
delete old_top;
}
void display() { node *temp = new node; // no need to allocate a node in a // function that should only make output temp = top; // the memory temp points to before the // assignment leaks while (temp != NULL) { cout << temp->data << " "; temp = temp->next; } while (top == NULL) // why a loop? { cout << "nStack is Empty " << endl; exit (0); // again ... } }
-->
void display() const
{
if (!top) {
std::cout << "Stack is empty!n";
return;
}
for(node *current = top; current; current = current->next)
cout << current->data << ' ';
}