سؤال

I am implementing a stack using arrays here is the programme i have written

#include<stdio.h>

int path[100];  //stores the path vertices
int tp=-1;      //tp is top pointer in stack
//int graph_matrix[100][100];   
//int child_matrix[100][100];

void push(int vi)
{
  int i=0;
  tp++;
  path[tp]=vi;
  printf("pushing %d in index %d value: %d \n",vi,tp,path[tp]);
  for(i=0;i<5;i++)
    printf("%d  ",path[i]);
}

void pop()
{
  printf("popping %d\n",path[tp]);
  if(tp==-1) {
    printf("stack empty\n");
    goto end2;
  }

  path[tp]=-1;
  tp--;

end2:
  printf("");
}


int eg()
{
  int i=0;
  for(i=0;i<100;i++) 
    path[i]=-1;     //initializing path array tp -1

  print_path();
  push(30);
  print_path();
  push(40);
  print_path();
  push(50);
  print_path();
  //pop();
  print_path();
  push(60);
  print_path();
}

void print_path()
{
  int j=0;

  for(j=0;j<10;j++)
  {
    printf("%d    ",path[j]);
    j++;
  }
  printf("\n");
}

int main()
{
  eg();
  return 0;
}

But THe output shows me something else:

Output:

-1 -1 -1 -1 -1

pushing 30 in index 0 value: 30

30 -1 -1 -1 -1 30 -1 -1 -1 -1

pushing 40 in index 1 value: 40

30 40 -1 -1 -1 30 -1 -1 -1 -1

pushing 50 in index 2 value: 50

30 40 50 -1 -1 30 50 -1 -1 -1

30 50 -1 -1 -1

pushing 60 in index 3 value: 60

30 40 50 60 -1 30 50 -1 -1 -1

Can anyone please explain the output?

هل كانت مفيدة؟

المحلول

As mentioned in the comments, you increment the loop variable twice.

Why not simply print the stack in its entirety instead of only 5 elements?

void print_path(void)
{
  int j;

  for(j = 0; j <= tp; j++)
  {
    printf("%d ", path[j]);
  }
  printf("\n");
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top