数据结构回文判断

  • 格式:doc
  • 大小:95.00 KB
  • 文档页数:3

数据结构回文判断
实验类型:验证型
【问题描述】
试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如‘序列1&序列2’模式的字符序列。

其中序列1和序列2中都不含字符‘&’,且序列2是序列1的逆序列。

例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3 &3 -1’则不是。

思路:
首先建立一个字符数组,长度为100,然后向数组中写入索要判断的字符串。

定义两个指针,一个指向队头,一个指向队尾,队头的指针不断递增,队尾的指针不断递减,在P1<P2的前提下,两个地址上的数据进行比较,如相等则两地址分别向中间靠拢,如对比的结果不同则跳出,但此时P1指针小于P2指针,所以判断字符串不是回文;如两者一直相等直到他们的地址P1=P2或P1>P2(字符串为奇数个)时,跳出并判断为回文;在这其中P1指针的值与P2指针的值有不等的情况就直接判定不是回文。

代码源:
// huiwen.cpp : Defines the entry point for the console application. //
#include <stdio.h>
#include <string.h>
int main( void )
{
char str[100];
printf("请输入字符串:");
gets( str ); //输入字符
char *p1 = str, *p2 = str + strlen(str) - 1;//指针定义
for( ; p1 < p2 && *p1 == *p2; ++p1, --p2 );//FOR循环体为空puts( p1 < p2 ? "所输字符串不是回文" : "所输字符串是回文" );
return 0;
}
运行结果:
实验结论:
通过本次的课程设计,这里的回文就是把回文是指正读和反读均相同的字符序列,所以可以用程序将字符串颠倒后与原字符串相比较,所用到的数据结构有单链表和栈,单链表用于存储字符串,栈用于对单链表中字符串的判定。

先构造空栈,再将单链表存储的字符串中的前一半字符进栈,将栈中的字符逐个与单链表中的后半部分的字符进行比较。

如果字符全部相等,则判定字符串是回文;如果有一个字符不相等,则判定字符串不是回文。

也可以用首尾对比的方法较简单,将两个指针分别指向字符串的头地址和尾地址,两者中的数据相比较,如相等则两地址分别向中间靠拢,如对比的结果不同则跳出,但此时P1指针小于P2指针,所以判断字符串不是回文;如两者一直相等直到他们的地址P1=P2或P1>P2(字符串为奇数个)时,跳出并判断为回文;在这其中P1指针的值与P2指针的值有不等的情况就直接判定不是回文。