• 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 <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define SizeMax 105
    typedef 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
    ");
        else printf("No
    ");
        DestroyStack(s);
        return 0;
    }
    

  • 相关阅读:
    使用binlog恢复数据
    Xtrabackup增量差量备份
    解压腾讯DB冷备的xb文件
    mysqldump
    xtrabackup备份选项
    MySQL的各种日志
    MySQL的事务相关概念
    LVS(dr)+keepalived
    MeasureSpec学习
    网络通信机制:Socket、TCP/IP、HTTP
  • 原文地址:https://www.cnblogs.com/im0qianqian/p/5989394.html
Copyright © 2020-2023  润新知