我在堆栈中实现了基本的push
和pop
函数。我有一个函数打印值并告诉用户堆栈是否为空。如果不是,那么它会打印堆栈中的值(下面的代码)。现在,在新函数中添加值的正确方法是什么(在堆栈中称为add_stack_values
并显示总和?这些值是使用<time.h>
随机生成的。
void print_stack(Stack *stack) {
int i;
if (stack->top == -1) {
printf("The stack is empty");
}
else {
printf ("Stack:\n");
for (i = 0; i <= stack->top; ++i) {
add_stack_values(stack);
printf(" %d\n", stack->item[i]);
}
}
}
堆栈声明如下:
typedef struct {
int vrh, polje[MAXSTACK];
} Stack;
如果您需要任何其他信息来回答问题,请随时告诉我,我会编辑问题。
答案 0 :(得分:2)
如果函数add_stack_values()应该获取堆栈中的每个条目(因为参数是指向堆栈的指针而不是堆栈中的每个元素),那么你应该不循环调用它时堆栈的条目。如果你这样做,你将在每次循环时重复完整添加。你可以在print_stack()中完成循环中的+ =。另一种方法是在结构total_value中有一个元素,每次推送或弹出堆栈中的元素时都会更新该元素。在这种情况下,您可以在想要查看时引用该元素。
stack-> total += stack->item[i];
另一点是,如果您在问题中使用了调用,则除非总计是堆栈中的元素,否则您无法跟踪先前的值以添加新项目。在这种情况下,您需要有一种初始化方法。
你应该把它作为
int add_stack_values(Stack *stack){
int i, retval=0;
if (stack->top == -1)
{
printf ("The stack is empty");
/* retval = 0; is set up by initialization */
}
else
{
printf ("Stack:\n");
for (i=0; i <= stack->top; ++i)
{
retval += stack->item[i];
}
}
printf ("Total: %d\n", retval);
return retval;
}