使用数组的堆栈实现

时间:2014-04-16 17:23:35

标签: c arrays stack

我在这里使用数组实现堆栈是我编写的程序

#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;
}

但是输出显示了别的东西:

输出:

  

-1 -1 -1 -1 -1

     

在索引0值中推送30:30

     

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

     

在索引1值中推送40:40

     

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

     

在指数2值中推动50:50

     

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

     

30 50 -1 -1 -1

     

在指数3值中推动60:60

     

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

有人可以解释输出吗?

1 个答案:

答案 0 :(得分:1)

如评论中所述,您将循环变量增加两次。

为什么不简单地打印堆栈而不是仅打印5个元素?

void print_path(void)
{
  int j;

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