簡體   English   中英

C - 用數組實現的堆棧中的大多數成員

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM