【问题标题】:stack implementation using arrays使用数组的堆栈实现
【发布时间】:2014-04-16 17:23:34
【问题描述】:

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

#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

将 30 推入索引 0 值:30

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

将 40 推入索引 1 值:40

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

将 50 推入索引 2 值:50

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

30 50 -1 -1 -1

将 60 推入索引 3 值:60

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

谁能解释一下输出?

【问题讨论】:

  • print_path 正在递增j 两次。丢失第二个增量并完全从 push 函数中删除打印。
  • 你为什么要在print_path() 中增加j 两次?
  • @WhozCraig“几乎在同一时间发表评论”-高五
  • @StefanR.Falk back at ya!.
  • 如果您包含的数据比您实际的多,您将更容易理解正在打印的数据。就目前而言,您无法查看30 -1 -1 -1 -1 30 -1 -1 -1 -1 之类的行并非常清楚地掌握您正在查看的内容。例如,printf("[%d]=%d ",i, path[i]); 会使内容更具可读性......就像这里和那里额外的 \n 一样。

标签: c arrays stack


【解决方案1】:

如 cmets 中所述,循环变量递增两次。

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

void print_path(void)
{
  int j;

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

【讨论】:

    猜你喜欢
    • 2015-08-17
    • 1970-01-01
    • 2020-10-24
    • 2016-03-15
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多