-
题目要求:回文是指正读反读均相同的字符序列,如"abba"和"abdba"均是回文,但"good"不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)
-
判断回文的代码
int JudgeHuiWen(char *str) { SqStack s; InitStack(&s); int i; char temp; int len=strlen(str); for(i=0;i<len/2;i++) Push(&s,str[i]); if(len%2==1)i++;//当字符个数为奇数时跳过中间字符 while(!StackEmpty(s)) { temp=Pop(&s); if(temp!=str[i]) return 0; else i++; } return 1; } -
完整程序
#include<stdio.h> #include <string.h> #define StackSize 10 #define MAXSIZE 10 typedef struct { char data[StackSize]; int top; }SqStack; //初始化栈 void InitStack(SqStack *S) { S->top=-1; } //栈的判空 int StackEmpty(SqStack S) { if (S.top==-1) return 1; else return 0; } //进栈 int Push(SqStack *S,char e) { if(S->top == StackSize -1) { return 0; } S->top++; S->data[S->top]=e; return 1; } //出栈 char Pop(SqStack *S) { if(S->top==-1) return 0; char e=S->data[S->top]; S->top--; return e; } int JudgeHuiWen(char *str) { SqStack s; InitStack(&s); int i; char temp; int len=strlen(str); for(i=0;i<len/2;i++) Push(&s,str[i]); if(len%2==1)i++;//当字符个数为奇数时跳过中间字符 while(!StackEmpty(s)) { temp=Pop(&s); if(temp!=str[i]) return 0; else i++; } return 1; } int main() { char str[MAXSIZE]; gets(str); int judge=JudgeHuiWen(str); if(judge==1) printf("此字符序列是回文!"); else printf("此字符序列不是回文!"); }
回文是指正读反读均相同的字符序列,如“abba“和“abdba“均是回文,但“good“不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)
最新推荐文章于 2024-12-15 20:33:52 发布
该博客介绍了一种利用栈来判断字符序列是否为回文的方法。代码中定义了一个`JudgeHuiWen`函数,首先初始化栈,然后将字符串的一半字符入栈。之后逐个比较栈顶元素与未入栈的对应字符,若不相等则返回0表示非回文,反之则返回1表示回文。完整程序还包括栈的相关操作函数如初始化、进栈、出栈和栈空判断。
该文章已生成可运行项目,
本文章已经生成可运行项目

2万+

被折叠的 条评论
为什么被折叠?



