Yuja_Wang 2019-02-12 11:11
浏览 526

单调栈实现连续矩形最大面积的算法,报错如上,求大神指点

# Microsoft C++ 异常: std::bad_alloc,位于内存位置 0x00CDD8DC 处,我写的单调栈实现连续矩形最大面积的算法,报错如上,求大神指点

图片说明图片说明

代码思想用的是这位博主的https://blog.csdn.net/u012534831/article/details/74356851

#include "pch.h"
#include <iostream>
#include<stdio.h>
#include<string.h>
typedef struct LNode{
    int data;
struct LNode*next;
} LNode,*LinkList;
typedef LinkList LinkStack;
void InitStack_L(LinkStack &S) {
    S = NULL;
}
void DestroyStack_L(LinkStack &S) {
    LinkList p;
    while (S) {
        p = S;
        S = S->next;
        delete p;
    }
}
bool GetTop_L(LinkStack &S,int &e) {
    if (!S)
        return false;
    e = S->data;
    return true;
}
void Push_L(LinkStack &S, int e) {
    LinkList p;
    p = new LNode;
    p->data = e;
    p->next = S;
    S = p;
}
bool Pop_L(LinkStack &S, int &e) {
    LinkList p;
    if (!S)
        return false;
    p = S;
    S = S->next;
    e = p->data;
    delete p;
    return true;
}
int StackEmpty_L(LinkStack &S) {
    if (S = NULL)
        return true;
    return false;
}
int main()
{
    int n, b, c, max = 0, sum = 0, L, R, i, a[100005];
    LinkStack S;
    LinkList p;
    memset(a, 0, sizeof(a));
    InitStack_L(S);
    scanf_s("%d", &n);
    for (i = 0; i < n; i++) {
        scanf_s("%d", &a[i],1);
    }
    i = 0;
    while (i < n) {
        if (i = 0) {
            Push_L(S, i);
            i++;
            continue;
        }
        GetTop_L(S,b);
        if (a[i] > b) {
            Push_L(S, i);
            i++;
        }
        else if (a[i] = b) {
            continue;
        }
        else {
            Pop_L(S, c);
            p = S;
            L = p->next->data + 1;
            R = i - 1;
            sum = a[c] * (R - L + 1);
        }
        if (sum > max) {
            max = sum;
        }
    }
    while (!StackEmpty_L(S)) {
        Pop_L(S, c);
        if (StackEmpty_L(S))
            L = 0;
        else {
            p = S;
            L = p->next->data + 1;
        }
        R = i - 1;
        sum = a[c] * (R - L + 1);
        if (sum > max) {
            max = sum;
        }
    }
    DestroyStack_L(S);
    printf("%d", max);
}

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 安卓adb backup备份应用数据失败
    • ¥15 eclipse运行项目时遇到的问题
    • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
    • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
    • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
    • ¥50 成都蓉城足球俱乐部小程序抢票
    • ¥15 yolov7训练自己的数据集
    • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
    • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
    • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)