此题是殷人昆编著的《数据结构(C语言描述)》中队列的题目,页码84.
题: 给出一个字符序列,判断它是否是回文。回文是指一个字符序列以中间字符为基准,两侧字符完全对称相等。例如,字符序列“abcba”或“abccba”即为回文,而“abcdefg”就不是回文。
解: 可以利用一个队列和一个栈来解决问题。首先把给定的字符序列分别存入栈和队列,然后分别从栈和队列中各退出一个字符,比较退队列的字符和退栈的字符是否相等。若不相等,则该字符串不是回文;若相等,则继续从队列和栈中各退出一个字符,重复上述比较。如果队列和栈同时为空,则说明对应字符全部相等,该字符串是回文。
#include <string.h>
#include "Stack.h"
#include "Queue.h"
typedef char SElemType;
typedef char QElemType;
/**
* 判断字符串str是否是回文。
* 输入:
* char* str :字符串头指针
* 返回:
* 1:是回文
* 0:不是回文
*/
int RoundStringJudge(char* str)
{
Stack S;
Queue Q;
char ch1, ch2;
int i;
InitStack(S); /* 初始化栈 */
InitQueue(Q); /* 初始化队列 */
for(i=0; i<strlen(str); i++){
EnQueue(Q, str[i]);
Push(S, str[i]);
}
while(!StackEmpty(S) && !QueueEmpty(Q)){
Pop(S, ch1);
DeQueue(Q, ch2);
if(ch1 != ch2) return 0;
}
return 1;
}