【问题标题】:Popping a value from one stack and Pushing to another using C从一个堆栈弹出一个值并使用 C 推送到另一个堆栈
【发布时间】:2021-07-15 00:01:21
【问题描述】:

我目前正在学习一些 C 语言并创建了一个基本的 connect 4 游戏。我现在正在尝试实现撤消/重做功能,我使用数组创建了一个堆栈,基本上保存了每个玩家所做的每一个动作。我可以将移动和弹出移动推入和移出堆栈,所以我可以开始工作的撤消部分,重做部分是我苦苦挣扎的地方。我想知道我是否可以创建一个临时堆栈,当我从我的主堆栈中弹出时,我可以推送到这个临时堆栈吗?在我的脑海中,这也将允许我重做动作。

我找不到任何体面的例子来很好地解释这一点,如果有人创造了类似的东西,我只是在寻找正确的方向?此外,如果有更有效的方法,我也完全愿意接受。

提前谢谢你

    void push2(int y)
{
  if(top2 == MAX_SIZE2 -1) { // stack full case.
        printf("Error: stack is full\n");
        return;
    }
    
    top2 = top2 + 1;
    stack2[top2] = y;
    //A[++top] = y;
}

      // Pop operation to remove an element from top of first stack.
void pop()
{
    push2(top); //add to second stack 
    
    if(top == -1) { // If stack is empty, throw error.
        printf("Error: No items to pop\n");
        return;
    }
     
    //x = stack[top];
    //top = top - 1;
    
    top--;
}

【问题讨论】:

  • 您已经实现了一个堆栈,但不知道如何实现第二个?
  • 所以我知道如何实现第二个,我猜我要问的是,当我 pop() 时,我会调用我的第二个 push() 函数来将值添加到第二个堆栈,反之亦然反之亦然以恢复原状?
  • 何不试一试,如果遇到问题,请寻求帮助?
  • 谢谢你,Scott,我尝试实现并得到一个错误:“调用的参数太少”。我已经用我尝试过的代码编辑了这篇文章。这是因为当我在 pop 中使用 push2() 时,我没有将值分配给变量,因此根本不推送任何东西?
  • 如果你什么都不推送,为什么还要打电话给push2

标签: arrays c stack


【解决方案1】:

我认为将 push2(top); 更改为 push2(stack[top]); 可能会有所帮助。

您的 top 变量似乎是一个索引变量,因此它仅在 stack 的上下文中才有意义

【讨论】:

  • 非常感谢您的帮助。现在可以从两个堆栈中添加和删除!
猜你喜欢
  • 2019-08-08
  • 2019-04-26
  • 1970-01-01
  • 2022-10-17
  • 2013-12-26
  • 1970-01-01
  • 2013-07-23
  • 2020-04-03
  • 1970-01-01
相关资源
最近更新 更多