首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C-用数组实现堆栈中的大多数成员

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

Stack Overflow用户
提问于 2017-10-17 10:19:44
回答 3查看 86关注 0票数 2

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

例子:推(1),推(2),推(3),推(4),推(5),推(6)

成员最多为6人。

例2:推(1)、推(2)、推(3)、推(4)、推(5)、推(6)、弹出、弹出、推(5)、推(6)、推(7)、推(8)、弹出;

成员最多应为8人。

我一直在想怎么做。

我首先在每次推送时添加一个计数器,或者调用pop函数。

代码语言:javascript
运行
复制
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;

并将数据发送到函数:

代码语言:javascript
运行
复制
case 1:
            TopTopova(top, pushCalled, popCalled);
            break;

在函数本身中,我的思想过程是检查pop是否被调用过一次,因为这意味着最大值为= pushCalled;

代码语言:javascript
运行
复制
   void TopTopova(int top, int pushOperation, int popOpeartion)
{
    if(popOpeartion == 0)
    {
        max = pushOperation;
    }
}

现在的问题是,当我们也使用pop时,我不知道如何跟踪最大值。我希望我的问题足够清楚让你们明白。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-17 10:44:33

您可以定义一些currentDepth,以便在调用push时增加,在pop时减少。还定义maxDepth (堆栈拥有最多成员时的值),并检查currentDepth是否大于最大深度。

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2017-10-17 10:48:54

我将保留两个变量-- int size (保持堆栈当前大小)和int max_size (保存所需信息)。

size在推送时增加,当"poping“时减少。max_size只有在push过程结束时才会改变,如下所示:

代码语言:javascript
运行
复制
if (size > max_size)
    max_size = size;
票数 1
EN

Stack Overflow用户

发布于 2017-10-17 10:28:41

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

代码语言:javascript
运行
复制
int
push(stack* this, item_t item)
{
    // Push the element
    this->most = max(this->most, this->size);
    // Do things and return
}

pop操作根本不会影响它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46787827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档