0

i'm trying to perform all operations(push, pop, peep, update, show) on stack using array in C.It's working fine when i am calling the show() at last after calling all of the functions that i need. But whenever i call show() before any of the operations than it is not giving me the appropiate result. I'm using following code:

int main()
{
    push(1);
    push(2);
    push(3);
    push(4);
    push(6);
    pop();
    push(5);
    show();//line 8
    //push(7);//line 9
    //pop();
    //peep();
    //update();
    //show();//line 13
    return;
}

void push(int num){//insert an item

    if(top==MAXSIZE-1)
    {
        printf("Overflow condition");
        return;
    }
    top++;
    stack[top]=num;
    //return;
}

void pop()//delete a item from top
{

    int num;
    if(top==-1)
    {
        printf("Underflow condition");
        return;
    }
    num=stack[top];
    top--;
    //return;
}

void show()//display elements
{

    if(top==-1){
        printf("Underflow");
        return;
    }
    while(top!=-1){
        printf("%d\n",stack[top--]);
    }
    //return;
}

void peep()//extract information
{

    int loc,num;
    printf("enter location:\n");
    scanf("%d",&loc);
    if(top-loc+1 < 0)
    {
        printf("No item at the given location\n");
        return;
    }
    else{
        num=stack[top-loc+1];
        printf("\nItem at location %d is %d",loc,num);
    }
}

void update(){//update information

    int loc,item;
    printf("enter new item:");
    scanf("%d",&item);
    printf("enter location:");
    scanf("%d",&loc);
    if(top-loc+1 < 0)
    {
        printf("No item at the given location\n");
        return;
    }
    else{
        stack[top-loc+1]=item;
        printf("\nItem inserted");
    }
}

Here after calling show(),top will point to -1(empty) at line 8,so after that following consequences will be:

  • push() will insert at position 1 instead of at top.
  • pop() will show underflow condition.
  • peep() and update will go in if condition.

So how can i set top to the top element in the stack after once calling the show()? Thanks.

3 Answers 3

3

Your show() method modifies the top pointer and this is wrong:

void show()//display elements
{

    if(top==-1){
        printf("Underflow");
        return;
    }
    while(top!=-1){
        printf("%d\n",stack[top--]); // <--- here 'top--' will modify the top pointer
    }
    //return;
}

You can change the show() method like this:

void show()//display elements
{

    if(top==-1){
        printf("Underflow");
        return;
    }
    int i = top; // introducing a new variable to iterate through the stack
    while(i!=-1){
        printf("%d\n",stack[i--]); // now 'i' is modified
    }
    //return;
}
Sign up to request clarification or add additional context in comments.

Comments

3

One problem with your show function is that, it is also trying to pop out all the data. You should not be doing the top-- in your show function.

Comments

0

//WAP to perform Stack Operation usin C-- 1. Push, 2.pop, 3.peep, 4.change, 5.top-of-stack, 6.is-empty, 7.is-full, 8.display

#include<stdlib.h>

#include<stdio.h>

#define max_size 5

int stack[max_size],top=-1,i,x;
    /*------ Function Prototype------------*/
void push();
void pop();
void peep();
void display();
void top_stack();
void change();
void is_empty();
   /*-------------------------------------*/

  int main()
  {
    int choice;

    do{

        printf("\n\n--------STACK OPERATIONS-----------\n");
        printf("1.Push\n");
        printf("2.Pop\n");
        printf("3.Peep\n");
        printf("4.Display\n");
        printf("5.Change\n");
        printf("6.TOP\n");
        printf("7.exit\n");
        printf("-----------------------");
        printf("\nEnter your choice:\t");
        scanf("%d",&choice);

        switch(choice)
       {
        case 1:    push();
                   break;
        case 2:    pop();
                   break;
        case 3:    peep();
                   break;
        case 4:    display();
                   break;
        case 5:    change();
                   break;
        case 6:    top_stack();
                   break;
        case 7:    exit(0);
                   break;
        default:    printf("\nInvalid choice:\n");
                   break;
        }

     }while(choice!=7);
      return 0;
    }


    void push() //Inserting element in to the stack
    {
      int item;
       if(top==(max_size-1))
        {
            printf("\nStack Overflow:");
        }
       else
        {
          printf("Enter the element to be inserted:\t");
          scanf("%d",&item);
          top=top+1;
          stack[top]=item;
         }
     }

     void pop()      //deleting an element from the stack
    {
      int item;
       if(top==-1)
       {
         printf("Stack Underflow:");
       }
       else
       {
         item=stack[top];
         top=top-1;
         printf("\nThe poped element: %d\t",item);
       }
    }

    void peep()
    {            
       printf("enter the i th element");
       scanf("%d",&i);
       if(top-i+1<0)
       {
         printf("\nStack is empty:");
       }
       else
       {
         printf("The topmost element of the stack is %d",stack[top-i+1]);
       }
    }

    void display()
     {
      int i;
        if(top==-1)
        {
         printf("\nStack is Empty:");
        }
        else
       {
        printf("\nThe stack elements are:\n" );
         for(i=top;i>=0;i--)
         {
          printf("%d\n",stack[i]);
          }
        }
     }


    void change()
    {
      printf("enter the i th element");
      scanf("%d",&i);
        if(top-i+1<0)
        {
         printf("\nStack is empty:");
        }
        else
        {
         printf("enter the element to be changed\n");
         scanf("%d",&x);

         stack[top-i+1]=x ;
         printf("The topmost element of the stack is %d",stack[top-i+1]);
        }

    }
    void top_stack()
    {
    int t;
    t=stack[top];
    printf("The Topmost element of stack is =%d",t);

    }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.