【发布时间】: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 一样。