#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;
}
The Output of this code is 5 10 5 20 Stack is Empty.
Which is wrong output and the correct output is 5 10 20 Stack is Empty..
Anyone tell me why this errors occured.
The Refrence of the code :[ Implementation of stack using Templates and And Linked List in c++
No, the output is correct.
a.push(5);
a.display();
This displays the first 5
.
a.push(10);
a.display();
The 5
is still on the stack, so now this displays the 10
and then the 5
.
a.pop();
a.pop();
a.push(20);
a.display();
Now everything is removed, the 20
is added and the displayed, so this should just display 20
.
And then the empty stack is printed with
a.pop();
a.display();
So put together, it should 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 << ' ';
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.