【问题标题】:C - most members in a stack implemented with arrayC - 堆栈中的大多数成员用数组实现
【发布时间】: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 时,我不确定如何跟踪最大值。我希望我的问题足够清楚,让你们理解。

【问题讨论】:

  • 而不是pushCalledpopCalled 一个名为stackSize 的变量怎么样?推入时增加,弹出时减少。
  • 如果您还没有计数器,请为当前堆栈大小添加计数器,而不是(或附加于)popCalledpushCalled。然后添加成员maxStackSize,将其初始化为零并检测currentStackSize的最大值:maxStackSize=max(maxStackSize, currenStackSize)当你做++pushCalled时。

标签: c arrays stack


【解决方案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;
}

【讨论】:

    【解决方案2】:

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

    size 会在推送时递增,而在“poping”时递减。 max_size只会在push过程结束时改变,像这样:

    if (size > max_size)
        max_size = size;
    

    【讨论】:

    • Size 在这种情况下是用词不当。堆栈中的元素数量通常称为堆栈深度。它的大小取决于它的深度和堆栈中元素的大小。
    【解决方案3】:

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

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

    pop 操作根本不会影响它。

    【讨论】:

    • @harper 比我快。
    猜你喜欢
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 2010-12-15
    • 2023-04-02
    • 2015-08-17
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    相关资源
    最近更新 更多