[英]C - most members in a stack implemented with array
我正在尝试编写一个函数,该函数将打印出堆栈中成员最多时的值。
示例: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)、push(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 时,我不确定如何跟踪最大值。 我希望我的问题足够清楚,让你们明白。
您可以定义一些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;
}
我会保留两个变量 - int size
,以保持堆栈的当前大小,以及int max_size
以保存您想要的信息。
推入时size
会增加,“弹出”时会减少。 max_size
只会在push
过程结束时更改,如下所示:
if (size > max_size)
max_size = size;
您需要跟踪当前的最大值并在push
功能中执行以下操作:
int
push(stack* this, item_t item)
{
// Push the element
this->most = max(this->most, this->size);
// Do things and return
}
pop
操作根本不会影响它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.