C - 使用数组实现的堆栈中的大多数成员

时间:2017-10-17 10:19:45

标签: c arrays stack

我正在尝试编写一个函数,该函数将打印出堆栈具有大多数成员的值。

示例:按(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时,我不确定如何跟踪最大值。我希望我的问题很清楚,让你们明白。

3 个答案:

答案 0 :(得分:1)

您可以定义一些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;
}

答案 1 :(得分:1)

我会保留两个变量 - int size,以保持堆栈的当前大小,并int max_size保存您想要的信息。

当" 弹出"时,

size会在推送和减少时递增。 max_size只会在push程序结束时更改,如下所示:

if (size > max_size)
    max_size = size;

答案 2 :(得分:0)

您需要跟踪当前的最大值,并在push函数中执行以下操作:

int
push(stack* this, item_t item)
{
    // Push the element
    this->most = max(this->most, this->size);
    // Do things and return
}

pop操作根本不会影响它。