Monday, 17 March 2014

Stack using Linked List in C++

ALGORITHM:

  1. Create a class Node.
    1. create a next pointer
    2. create a previous pointer
    3. create a variable to store data
  2. Create a class Stack.
    1. Create a node pointer top, which will represent the top element of our stack.
  3. Create a push() function.
    1. Create a temporary pointer of node class
    2. If top is equal to NULL
      1. Assign top to a new Node
      2. Assign the temporary pointer to top
      3. Assign next pointer of top to NULL
      4. Assign previous pointer of top to NULL
    3. Else
      1. Assign next pointer of top to new Node
      2. Assign top to next pointer of top
      3. Assign previous pointer of Top to temporary
      4. Assign temporary to top
      5. Assign next pointer of top to NULL
  4. Create a pop() function.
    1. Create a temporary pointer of Node class and assign it to top
    2. If temporary node is equal to NULL
      1. Print Stack is empty
    3. Else
      1. Assign top to previous node of top
      2. return data of temporary Node
  5. Create a top() function.
    1. Create a temporary pointer of Node class and assign it to top
    2. If temporary node is equal to NULL
      1. Print Stack is empty
    3. Else
      1. return data of temporary Node
  6. Create a display() function. //OPTIONAL
    1. Create a temporary pointer of Node class and assign it to top
    2. If temporary node is equal to NULL
      1. Print Stack is empty
    3. Else
      1. Loop until temporary node is not equal to NULL
        1. Print data of temporary Node
        2. Assign temporary Node to previous node of temporary node

CODE:

#include<iostream>

class Node{
public:
char data;
Node *pNext;
Node *pPrev;
Node(char );
};

class Stack{
public:
Node *pTop;

Stack();
void push(char );
char pop();
char top();
void display();
};

int main(){
Stack s;

s.push('1');
s.push('2');
s.push('3');
std::cout << "\nTop: " << s.top();
s.display();

std::cout << "\nPopped: " << s.pop();
std::cout << "\nPopped: " << s.pop();

std::cout << "\nTop: " << s.top();

return 0;
}

//NODE
Node::Node(char d){
data = d;
pNext = NULL;
pPrev = NULL;
}


//STACK
Stack::Stack(){
pTop = NULL;
}

void Stack::push(char data){
Node *pTemp;

if(pTop == NULL){
pTop = new Node(data);
pTemp = pTop;
pTop->pNext = NULL;
pTop->pPrev = NULL;
} else {
pTop->pNext = new Node(data);
pTop = pTop->pNext;
pTop->pPrev = pTemp;
pTemp = pTop;
pTop->pNext = NULL;
}
}

void Stack::display(){
Node *pTemp = pTop;

if(pTemp == NULL){
std::cout << "\nStack is Empty";
} else {
while(pTemp != NULL){
std::cout << "\n" << pTemp->data;
pTemp = pTemp->pPrev;
}
}
}

char Stack::pop(){
Node *pTemp = pTop;

if(pTemp == NULL){
std::cout << "\nStack is Empty";
} else {
pTop = pTop->pPrev;
return pTemp->data;
}
}


char Stack::top(){
Node *pTemp = pTop;

if(pTemp == NULL){
std::cout << "\nStack is Empty";
} else {
return pTemp->data;
}
}