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

时间:2015-06-28 02:19:02

标签: c stack

我在堆栈中实现了基本的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;

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

1 个答案:

答案 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;
}