【发布时间】: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?