检测串str是否回文的算法

此题是殷人昆编著的《数据结构(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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值