藏龙木易 2021-10-09 15:38 采纳率: 100%
浏览 34
已结题

数据结构PTA题不知道怎么改

题目详情

img


结果提示

img

思路:按顺序依次入栈直至栈顶元素和要抛出的元素相同,最后检查栈是否为空来判断能否实现这种出栈顺序


#include<stdio.h>
#include<stdlib.h>
struct Stack {/*结构声明*/
    int *Data;
    int Top; 
    int Maxsize;
};
struct Stack *CreatStack(int Maxsize) {
    struct Stack *s=(struct Stack *)malloc(sizeof(struct Stack));//创建栈
    s->Data=(int*)malloc(sizeof(int));
    s->Top=-1;
    s->Maxsize=Maxsize;
    return s;
}
int Isfull(struct Stack *s) {
    return (s->Top==(s->Maxsize)-1);//判断栈满
}
int Push(struct Stack*s,int x) {
    if(Isfull(s)) {
        return 0;
    } else {                            //入栈
        s->Data[++(s->Top)]=x;
        return 1;
    }
}
int Isempty(struct Stack*s) {
    return(s->Top==-1);              //判断栈空
}
int Pop(struct Stack*s) {
    if (Isempty(s)) {
        return 0;                //出栈
    } else {
        (s->Top)--;
        return 1;
    }
}
void Pd(int max,int m) {
    int cs=0;
    int shuju;
    int i;
    int flag=0;
    struct Stack*Ls=CreatStack(max);
    scanf("%d",&shuju);
    for (i=1;i<=m;i++) {
        if(Ls->Top==-1||shuju!=(Ls->Data[Ls->Top])) {
            if (Ls->Top<max-1) {
                Push(Ls,i);
            } else {
                cs=1;
            }
        }
        //printf("i=%d 顶元素=%d shuju=%d top=%d\n",i,Ls->Data[Ls->Top],shuju,Ls->Top);
        if (cs==1) break;
        
        while(Ls->Top!=-1&&shuju==(Ls->Data[Ls->Top])) {
            Pop(Ls);
            //printf("i=%d 顶元素=%d shuju=%d top=%d\n",i,Ls->Data[Ls->Top],shuju,Ls->Top);
            flag++;
            if (flag<m) {
                scanf("%d",&shuju);
            }
        }
    }
    for (i=flag+1;i<m;i++) {
        scanf("%d",&shuju);
    }
    if (Ls->Top==-1) {
        printf("YES\n");
    } else {
        printf("NO\n");
    }
    //free (Ls->Data);
    //free (Ls);
}
int main()
{
    int max,m,n;
    scanf("%d %d %d",&max,&m,&n);
    int i;
    for (i=0;i<n;i++) {
        Pd(max,m);
    }
    return 0;
}

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-10-09 17:13
    关注

    提示是当m和n相当的这个测试用例报错啊。当m==n时,你测试这种情况了么

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月17日
  • 已采纳回答 10月9日
  • 创建了问题 10月9日

悬赏问题

  • ¥15 如何删除这个虚拟音频
  • ¥50 hyper默认的default switch
  • ¥15 网站打不开,提示502 Bad Gateway
  • ¥20 基于MATLAB的绝热压缩空气储能系统代码咨询
  • ¥15 R语言建立随机森林模型出现的问题
  • ¥20 unity内置语言切换的按钮设置
  • ¥15 中级微观经济学,生产可能性边界问题
  • ¥15 TCP传输时不同网卡传输用时差异过大
  • ¥15 请各位看看我写的属于什么算法,或者有更正确的写法?
  • ¥15 html5 qrcode 扫描器