【发布时间】:2018-03-29 00:12:06
【问题描述】:
我正在尝试编写一个函数,该函数将打印出堆栈成员最多时的值。
示例:push(1)、push(2)、push(3)、push(4)、push(5)、push(6)
成员上限应为 6。
示例 2:push(1)、push(2)、push(3)、push(4)、push(5)、push(6)、pop、pop、push(5)、push(6)、推(7),推(8),流行;
成员上限应为 8。
我一直在想办法做到这一点。
我开始时在每次 push 或 pop 函数被调用时添加一个计数器。
case 2:
pushCalled++;
scanf("%d", &val);
ret_val = push(stack, &top, val);
if(ret_val==-1) DEBUG("Stog is full.\n");
break;
case 3:
popCalled++;
ret_val = pop(stack, &top);
if(ret_val==-1) DEBUG("Stog is empty.\n");
break;
并将数据发送到函数:
case 1:
TopTopova(top, pushCalled, popCalled);
break;
在函数本身,我的想法是检查pop是否没有被调用一次,因为这意味着最大值将是= pushCalled;
void TopTopova(int top, int pushOperation, int popOpeartion)
{
if(popOpeartion == 0)
{
max = pushOperation;
}
}
现在的问题是,当我们也使用 pop 时,我不确定如何跟踪最大值。我希望我的问题足够清楚,让你们理解。
【问题讨论】:
-
而不是
pushCalled和popCalled一个名为stackSize的变量怎么样?推入时增加,弹出时减少。 -
如果您还没有计数器,请为当前堆栈大小添加计数器,而不是(或附加于)
popCalled和pushCalled。然后添加成员maxStackSize,将其初始化为零并检测currentStackSize的最大值:maxStackSize=max(maxStackSize, currenStackSize)当你做++pushCalled时。