YTU 3001: 判断操作是否合法(栈和队列)
来源:互联网 发布:免费门户网站源码下载 编辑:程序博客网 时间:2024/05/22 17:27
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 <stdio.h>#include <stdlib.h>#include <string.h>#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;}
1 0
- YTU 3001: 判断操作是否合法(栈和队列)
- Problem A: 判断操作是否合法(栈和队列)
- Problem A: 判断操作是否合法(栈和队列)
- Problem A: 判断操作是否合法(栈和队列)
- 判断操作是否合法(栈)
- 判断栈操作序列是否合法
- 3.5判断出栈和入栈操作序列是否合法
- 汉诺塔(三) 判断操作是否合法 + 栈(stack)数组
- 判断操作是否合法A
- YTU 3004: 栈的基本运算(栈和队列)
- YTU 3002: 出栈顺序(栈和队列)
- YTU 3003: 括号匹配(栈和队列)
- YTU 3005: 皇后问题(栈和队列)
- YTU 2238: 括号匹配(栈和队列)
- ytu 2242 回文(栈和队列)
- YTU OJ 2242: 回文(栈和队列)
- YTU.2244: 背包问题(栈和队列)
- 【数据结构】 栈和队列 YTU 2248: 栈的基本运算(栈和队列)
- putchar()
- 在Java8的foreach()中使用return/break/continue
- LeetCode之7 --- Reverse Integer
- java实现菱形输出
- 类中似有属性的访问方式
- YTU 3001: 判断操作是否合法(栈和队列)
- Android SDK 接入指南
- printf输出顺序
- MySQL数据库的连接
- css选择器“+”和“~”的区别
- malloc-free-new-delete
- MySQL数据库的连接
- java bridge method
- YTU 3003: 括号匹配(栈和队列)