程序源代码称正读与反读都相同的字符序列为“回文”序列。
试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如“序列1&序列2”模式的字符序列。其中序列1和序列2中都不含字符“&”,且序列2时序列1的逆序列。例如,“a+b&b+a”是属于该模式的字符序列,而“1+3&3-1”则不是。
#include#include #include #define Maxsize 20 typedef struct PalindromeQueue //定义顺序列表结构体 { char LinlistQ[Maxsize]; int front ; int rear ; }PalindromeQueue; typedef struct PalindromeStack //定义顺序栈结构体 { char linklistS[Maxsize]; int top; }PalindromeStack; void Init(PalindromeQueue *Q,PalindromeStack *S) //初始化指针 { Q->front=Q->rear=0; S->top=-1; } void Judje(PalindromeQueue *Q,PalindromeStack *S) { while (S->top != -1 ) { if(Q->LinlistQ[Q->front] != S->linklistS[S->top]){ printf("! ! 该字符序列不是回文序列 !!n"); break;} (S->top)--; (Q->front)++; } if (S->top = -1 && Q->front == Q->rear) { printf("¥¥ 该序列式是回文序列 ¥¥n"); } } int main() { int j=0; char List[Maxsize]; PalindromeQueue Q; PalindromeStack S; printf("请输入一段需要判断是否是“回文序列”的字符序列并以'@'字符作为结束标识符n"); while(1) //输入的合法性检验 { scanf_s("%s",List,sizeof(List)); //sizeof时是一个操作符,可测量变量声明后所占内存数 if(List[strlen(List)-1] != '@'){ //strlen(char*)是一个函数,求的是字符串的实际长度,从第一个' '开始到' '结束,所测必须赋值 printf("!!输入不合法,输入序列结束时未加'@',请重新输入!!n"); continue;} break; } Init(&Q,&S); //初始化队列和栈 while(List[j] != '@') { Q.LinlistQ[j]=List[j]; //进入队列 Q.rear++; //队尾后移 S.linklistS[j]=List[j]; //进栈 S.top++; j++; } Judje(&Q,&S); //判断是否是回文序列 return 0; }



