如何在新函数中正确地添加堆栈中的整数值?

How to properly add integer values from a stack in a new function?

我已经在我的堆栈中实现了基本的 pushpop 函数。我有一个打印值并告诉用户堆栈是否为空的函数。如果不是,则打印堆栈中的值(下面的代码)。现在,在新函数中添加值的正确方法是什么(在堆栈中调用 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;

如果您需要任何其他信息来回答问题,请随时告诉我,我会编辑问题。

如果函数 add_stack_values() 应该获取堆栈中的每个条目(因为参数是指向堆栈的指针而不是堆栈中的每个元素),那么您应该 not 在调用它时循环遍历堆栈的条目。如果你这样做,你将在每次通过循环时重复完整的加法。否则你可以在 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;
}