在那种情况下流行和偷看做同样的事情?

Pet*_*rba 5 c stack peek

他们说,从我读过的所有资料来看,偷看和流行之间的区别在于偷看并没有消除最高价值.在我的讲义中提供的例子中,显然他们使用不同的减法方法做同样的事情.两个操作后顶部减去1.

我对吗?可能不是,有人可以解释这些有何不同?

int pop(void)
{
    assert(top>0);
    return data[--top];
}
int peek(void)
{
    assert(top>0);
    return data[top-1];
}
Run Code Online (Sandbox Code Playgroud)

pb2*_*b2q 7

top是堆栈的状态变量,存储在常规数组中.该变量top通过存储数组索引来引用堆栈的顶部.

第一个操作,pop使用递减运算符来更改变量top,因此堆栈的状态--top相当于top = top - 1.该值仍然在数组中,但由于变量top现在引用了不同的索引,因此有效地删除了该值:堆栈的顶部现在是另一个元素.现在,如果你调用a push,这个弹出的值将被覆盖.

第二个操作不会更改变量的值top,它只使用它来返回堆栈顶部的值.该变量top仍然引用与堆栈顶部相同的值,因此堆栈保持不变.


Bor*_*der 5

它们将返回相同的值,但只有 pop 更改顶部:

--top
Run Code Online (Sandbox Code Playgroud)

这相当于

top = top -1
Run Code Online (Sandbox Code Playgroud)

其中 top - 1 不会改变 top 的值。


Lun*_*din 5

在一般的编程术语中,“弹出”是指从堆栈中返回一个对象,同时将其从堆栈中移除的方法。术语“窥视”更通用,可用于其他数据容器/ADT,而不是堆栈。“偷看”总是意味着“给我下一个项目,但不要将它从容器中取出”。

“peek”最常与类似队列的数据容器一起使用,例如用于检查 Windows 消息队列中下一条消息的 Windows API 函数名为 PeekMessage()。