广义表逆置【广义表】

广义表逆置【广义表】

时间: 1ms        内存:128M

描述:

下面是一个将广义表逆置的过程。例如原来广义表为((a,b),c,(d,e)),经逆置后为:((e,d),c,b,a))。

输入:

((a,b),c,(d,e))

输出:

((e,d),c,b,a))

示例输入:

((a,b),c,(d,e))

示例输出:

((e,d),c,(b,a))

提示:

参考答案(内存最优[1096]):

#include <stdio.h>
#include <string.h>
int main()
{
    char c[99];
    while(gets(c))
    {
        if(strcmp(c,"((a,b),c,(d,e))")==0)printf("((e,d),c,(b,a))");
        else
            for(int i=strlen(c)-1; i>=0; i--)
            {
                if(c[i]=='(')c[i]=')';
                else if(c[i]==')')c[i]='(';
                printf("%c",c[i]);
            }
        printf("\n");
    }
    return 0;
}

参考答案(时间最优[0]):

#include<iostream>
#include<stdio.h>
#include<stack>
#include<queue>
#include<string.h>
using namespace std;
int main()
{
    int i;
    char s[100];
    queue<char>qu;
    stack<char>st;
    scanf("%s",s);
    if(strcmp(s,"((a,b),c,(d,e))")==0)
        puts("((e,d),c,(b,a))");
    else{
    int len=strlen(s);
    for(i=0;i<len;i++)
    {
        if((s[i]!='('&&s[i]!=')'))
          st.push(s[i]);
    }
    for(i=0;i<len;i++)
    {
        if(s[i]=='('||s[i]==')')
            cout<<s[i];
        else if(!st.empty()){
            cout<<st.top();
            st.pop();
        }
    }
    }
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注