【问题描述】
本题务必使用顺序栈或者链式栈实现。
试写一个算法,识别依次读入的一个以“@”为结束符的字符序列是否为形如 “序列1&序列2” 模式的字符序列。其中序列1和序列2都不含字符 “&”,且序列2是序列1的逆序列。例如,“ a+b&b+a ”是属该模式的字符序列,而 “1+3&3-1”则不是。
【输入形式】
以@为结尾的一串字符
【输出形式】
若符合模式则输出字符串长度,否则输出no
【样例输入】
a+b&b+a@
【样例输出】
3
【评分标准】
使用顺序栈或链式栈的知识,否则不能得分。
#include<iostream>
#include<stdlib.h>
using namespace std;
struct Stack
{
char str[10000];
int top;
};
void InitStack(Stack *&s)
{
s=(Stack*)malloc(sizeof(Stack));
s->top=-1;
}
void Push(Stack *&s,char *c)
{
if(s->top==9999)
{
cout<<"栈已满!无法进行操作!";
return;
}
s->top++;
s->str[s->top]=*c;
}
int EmptyStack(Stack *s)
{
if(s->top==-1)
return 1;
else
return 0;
}
void Pop(Stack *s,char *x)
{
*x=s->str[s->top];
s->top--;
}
int main()
{
Stack *s=NULL;
int len=0,i=0,j=0;
char c[5000],x,b[5000];
InitStack(s);
cin>>c[i];
while(c[i]!='&')
{
Push(s,&c[i]);
len++;
i++;
cin>>c[i];
}
cin>>b[j];
while(b[j]!='@'&&!EmptyStack(s))
{
Pop(s,&x);
if(b[j]==x)
{
j++;
cin>>b[j];
}
else
{
cout<<"no";
break;
}
}
if(b[j]=='@'&&EmptyStack(s))
cout<<len;
}