广义表逆置【广义表】
时间: 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;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。
