Problem A: 判断操作是否合法(栈和队列)

来源:互联网 发布:用python做的网站 编辑:程序博客网 时间:2024/05/02 01:19

Problem A: 判断操作是否合法(栈和队列)

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 211  Solved: 53
[Submit][Status][Web Board]

Description

假设以I和O分别表示进栈和出栈操作,栈的初态和终态均为空,进栈和出栈的操作序列可表示为仅由I和O组成的序列。

顺序栈的定义为

typedef struct
{
    ElemType data[SizeMax];
    int top;
}SqStack;
 
编写一个算法,判断栈中的序列是否合法!若合法则返回1,否则返回0.
需编写的算法为:int judge(SqStack *s);

Input

输入为一个字符串,表示进栈出栈的操作序列,该序列存储在栈中。

Output

若操作序列合法则输出“Yes”,否则输出"No"。

Sample Input

IOIIOIOO

Sample Output

Yes

HINT

1、只需提交你所编写的算法


2、栈的初态和终态均为空


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SizeMax 105
typedefchar ElemType;
typedefstruct
{
    ElemType data[SizeMax];
    inttop;
}SqStack;
void InitStack(SqStack *&s)
{
    s=(SqStack*)malloc(sizeof(SqStack));
    s->top=-1;
}
bool Push(SqStack *&s,ElemType c)
{
    if(s->top==SizeMax-1)returnfalse;
    s->top++;
    s->data[s->top]=c;
    returntrue;
}
    intjudge(SqStack *s)
    {
int b=-1,i;
for(i=0;i<=s->top;i++)
{
    if(s->data[i]=='I')
        b++;
    if(s->data[i]=='O')
        b--;
    if(b<-1||b>104)
    {
        break;
    }
} if(i==s->top+1&&b==-1)
return1;
else
return0;
}
void DestroyStack(SqStack *&s)
{
    free(s);
}
int main()
{
    SqStack *s=NULL;
    InitStack(s);
    charc[SizeMax];
    gets(c);
    for(inti=0;i<(int)strlen(c);i++)
        Push(s,c[i]);
    if(judge(s))printf("Yes\n");
    elseprintf("No\n");
    DestroyStack(s);
    return0;
}
0 0