YTU 3001: 判断操作是否合法(栈和队列)

网友投稿 266 2022-08-28

YTU 3001: 判断操作是否合法(栈和队列)

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

时间限制: 1 Sec   内存限制: 128 MB

提交: 4

解决: 2

题目描述

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

顺序栈的定义为

typedef struct { ElemType data[SizeMax]; int top; }SqStack;

编写一个算法,判断栈中的序列是否合法!若合法则返回1,否则返回0. int judge(SqStack *s);

输入

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

输出

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

样例输入

IOIIOIOO

样例输出

Yes

提示

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

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

迷失在幽谷中的鸟儿,独自飞翔在这偌大的天地间,却不知自己该飞往何方……

#include #include #include #define SizeMax 105typedef char ElemType;typedef struct{ ElemType data[SizeMax]; int top;} SqStack;void InitStack(SqStack *&s){ s=(SqStack*)malloc(sizeof(SqStack)); s->top=-1;}bool Push(SqStack *&s,ElemType c){ if(s->top==SizeMax-1)return false; s->top++; s->data[s->top]=c; return true;}int judge(SqStack *s){ int t=0; for(int i=0; i<=s->top; i++) { if(s->data[i]=='I')t++; else t--; if(t<0)return 0; } if(t==0)return 1; else return 0;}void DestroyStack(SqStack *&s){ free(s);}int main(){ SqStack *s=NULL; InitStack(s); char c[SizeMax]; gets(c); for(int i=0; i<(int)strlen(c); i++) Push(s,c[i]); if(judge(s))printf("Yes\n"); else printf("No\n"); DestroyStack(s); return 0;}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:后流量时代,面积营销才是生存创变之道!(流量为王的时代,企业的流量从哪儿来?)
下一篇:webkit HTML5 WebSocket 综合分析 2
相关文章

 发表评论

暂时没有评论,来抢沙发吧~