我正在尝试编写一个函数,它将打印出堆栈有大多数成员时的值。
例子:推(1),推(2),推(3),推(4),推(5),推(6)
成员最多为6人。
例2:推(1)、推(2)、推(3)、推(4)、推(5)、推(6)、弹出、弹出、推(5)、推(6)、推(7)、推(8)、弹出;
成员最多应为8人。
我一直在想怎么做。
我首先在每次推送时添加一个计数器,或者调用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时,我不知道如何跟踪最大值。我希望我的问题足够清楚让你们明白。
发布于 2017-10-17 10:44:33
您可以定义一些currentDepth
,以便在调用push时增加,在pop时减少。还定义maxDepth
(堆栈拥有最多成员时的值),并检查currentDepth
是否大于最大深度。
int maxDepth = 0;
int currentDepth= 0;
switch(action) {
case 2:
currentDepth++;
scanf("%d", &val);
ret_val = push(stack, &top, val);
if(ret_val==-1) DEBUG("Stog is full.\n");
break;
case 3:
currentDepth--;
ret_val = pop(stack, &top);
if(ret_val==-1) DEBUG("Stog is empty.\n");
break;
}
if (currentDepth > maxDepth)
{
maxDepth = currentDepth;
}
发布于 2017-10-17 10:48:54
我将保留两个变量-- int size
(保持堆栈当前大小)和int max_size
(保存所需信息)。
size
在推送时增加,当"poping“时减少。max_size
只有在push
过程结束时才会改变,如下所示:
if (size > max_size)
max_size = size;
发布于 2017-10-17 10:28:41
您需要跟踪当前最大值,并在push
函数中执行如下操作:
int
push(stack* this, item_t item)
{
// Push the element
this->most = max(this->most, this->size);
// Do things and return
}
pop
操作根本不会影响它。
https://stackoverflow.com/questions/46787827
复制相似问题