【发布时间】:2020-03-31 23:43:03
【问题描述】:
我有一个函数可以将所有非零整数下推到我的数组顶部,然后在 3x3 矩阵中重新打印它。 我遇到的问题是,当我将所有非零整数推入堆栈时,它会颠倒顺序。
** 我的数组的索引是向后的。即,在 3x3 矩阵中,坐标 (0,0) 将是左下角**
这里是相关代码:
void State::pushDown() {
std::stack<int> tempStack;
for ( int c = 0; c < BOARDSIZE; c++ )
{
for ( int r = 0; r < BOARDSIZE ; r++ )
{
if ( grid[r][c] != 0 ) tempStack.push( grid[r][c] );
}
for ( int r = BOARDSIZE; r != 0; --r )
{
if ( !tempStack.empty() )
{
grid[r-1][c] = tempStack.top();
tempStack.pop();
}
else
{
grid[r-1][c] = 0;
}
}
}
}
State() {
for (int i = 0; i < BOARDSIZE; i++)
for (int j = 0; j < BOARDSIZE; j++)
grid[i][j] = rand() % 7;
}
void State::printBoard() {
cout << endl;
for (int i = 0; i < BOARDSIZE; i++) {
for (int j = 0; j < BOARDSIZE; j++) {
cout << " " << grid[BOARDSIZE - i - 1][j] << " ";
}
cout << endl;
}
}
int main() {
srand(time(0));
State state;
state.printBoard();
state.pushDown();
state.printBoard();
return 0;
}
这是我当前的输出:
前下推功能
045
504
226
下推功能后:
006
224
545
如您所见,它成功地将非零元素推到矩阵的底部,但是在此过程中它颠倒了其他数字的顺序,我相信这是因为堆栈。
我的预期输出如下:
前下推功能
045
504
226
下推功能后:
005
544
226
我的问题是 - 我怎样才能修复我的函数,以便元素的顺序保持不变而不反转。
【问题讨论】:
-
你试过只使用队列吗?
-
抱歉忘记添加我正在关注想要使用堆栈的大学任务。我尝试了一个我工作的队列,因为我可以使用 front() 属性但是在这种情况下我不能使用队列
-
@elie1 -- 我试过它会是一个我工作的队列 -- 然后使用两个堆栈创建一个队列。把它变成一个类,放一个
front成员函数,你就完成了。从两个堆栈创建队列的代码很简单。 -
另外,也许我建议的是给你的任务的目标。换句话说,以一种偷偷摸摸的迂回方式,您应该使用堆栈来创建队列。