利用栈和队列的特性设计一个算法,用于判断一个字符串是否为回文。
测试输入
abcdefg↵
期待的输出
不是回文↵
测试输入
abccba↵
期待的输出
是回文↵
#include<iostream>
using namespace std;
class abstack {
public:
bool IsEmpty() {
return (height == 0) ? true : false;
}
virtual bool Push(int x) = 0;
virtual int Pop() = 0;
virtual void Clear() = 0;
int height;
};
class SeqStack :public abstack
{
public:
SeqStack(int i = 10);
SeqStack & Copy(const SeqStack &s)
{
maxsize = s.maxsize;
elements = new int[maxsize];
int len = s.height;
for (int i = 0; i < len; i++)
{
elements[i] = *(s.elements + i);
}
top = s.top;
height = s.height;
return *this;
}
SeqStack(SeqStack & s)
{
Copy(s);
}
~SeqStack()
{
Clear();
}
bool Push(int x);
int Pop();
void Clear() { delete[]elements; }
protected:
int top;
int *elements;
int maxsize;
};
SeqStack::SeqStack(int i)
{
height = 0;
top = -1;
maxsize = i>10 ? i : 10;
elements = new int[maxsize];
}
bool SeqStack::Push(int x)
{
if (top + 1 == maxsize)
return false;
else elements[++top] = x;
height++;
return true;
}
int SeqStack::Pop()
{
int x;
if (IsEmpty())
return false;
else
{
x = elements[top];
top--;
height--;
return x;
}
}
int main()
{
SeqStack a,d;
char c;
c = getchar();
while (c!='\n')
{
a.Push(c);
c=getchar();
}
SeqStack b(a);
while (!b.IsEmpty())
{
d.Push(b.Pop());
}
while (!a.IsEmpty())
{
if (a.Pop() != d.Pop())
{
cout << "不是回文\n";
return 0;
}
}
cout << "是回文"<<endl;
//system("pause");
return 0;
}