我在这里使用数组实现堆栈是我编写的程序
#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
有人可以解释输出吗?
答案 0 :(得分:1)
如评论中所述,您将循环变量增加两次。
为什么不简单地打印堆栈而不是仅打印5个元素?
void print_path(void)
{
int j;
for(j = 0; j <= tp; j++)
{
printf("%d ", path[j]);
}
printf("\n");
}