刚开始题目看了半天,没看懂。。。
其实就是将SH混合字符串输出为SSSHHH的形式
思路
遍历遇到H入栈暂存,遇到S直接添加到输出字符串中
//火车入栈问题
//使用顺序栈
char* TrainSeat(char *out, const char *in)
{
SqStack<char> seatStack;
int i = 0;
while (*in != '\0')
{
if (*in == 'H')
{
seatStack.Push(*in++);
}
else
{
*(out + i++) = *in++;
}
}
//将栈中的'H'出栈
int length = seatStack.StackLength(); //获得栈长
char c = '\0';
seatStack.GetTop(c); //获得栈顶元素
for (int j = 0; j<length; j++)
{
*(out + i++) = c;
}
*(out+i) = '\0';
return out;
}
Status Compare(const char *c)
{
SqStack<char> seqStack;
SqQueue<char> seqQueue;
char c1 = '\0';
char c2 = '\0';
for (int i = 0; c[i] != '@'; i++)
{
//入栈,入队
seqStack.Push(c[i]);
seqQueue.EnQueue(c[i]);
}
while (!seqStack.IsEmpty() && !seqQueue.IsEmpty())
{
seqStack.Pop(c1);
seqQueue.DeQueue(c2);
if (c1 != c2)
{
return ERROR;
}
}
if (seqStack.IsEmpty() && seqQueue.IsEmpty())
{
return OK;
}
}
测试
int main()
{
const char *a = "abcdedcba@";
if (Compare(a))
{
cout << a << "(不包括@)是回文序列!~" << endl;
}
return 0;
}
结果