【发布时间】:2018-10-07 20:54:07
【问题描述】:
在这里,我使用mini() 函数查找堆栈中的最小元素。在堆栈中推入和弹出时,我在逻辑上设置了min1 和min2。在哪些情况下我的代码会失败?我的代码有什么问题?
push 函数设置min1 和min2 变量。 min1 对应于最小元素,min2 对应于堆栈中的第二个最小元素。在弹出窗口中,如果弹出的元素等于 mini,那么我在弹出窗口之前将 min1 更新为第二个最小值并继续。所以在任何时候min1 在堆栈中的价值都是最低的。
class stac
{
public:
void push(int item)
{
if(top>=STACK_SIZE-1)
{
cout<<"Full"<<endl;
return;
}
else
{
if(item<min1)
{
min2 = min1;
min1=item;
}
s[++top]=item;
return;
}
}
void pop()
{
if(top==-1)
{
cout<<"Empty"<<endl;
return;
}
else
{
if(s[top]==min1)
{
min1=min2;
}
top--;
return;
}
}
void mini()
{
if(top==-1)
{
cout<<"no minimum"<<endl;
return;
}
else
{
cout<<min1<<endl;
}
}
private:
int min1 = INT_MAX;
int min2;
int s[STACK_SIZE];
int top = -1;
};
int main()
{
stac s1;
s1.push(5);
s1.push(2);
s1.push(9);
s1.push(1);
s1.push(24);
s1.push(-1);
s1.push(-87);
s1.push(23);
s1.mini();
s1.display();
return 0;
}
【问题讨论】:
-
假设我推送三个元素,每个元素都比前一个小(比如 3、2 和 1);然后弹出其中两个。此时堆栈中最小元素的值是多少,
min1的值是多少? -
在
main中,您可能应该在调用s1.mini之前调用s1.pop几次
标签: c++ algorithm stack c++14 minimum