栈实现判断回文
1 #include<iostream> 2 #include<cstdlib> 3 using namespace std; 4 5 //顺序栈定义 6 #define OK 1 7 #define ERROR 0 8 #define OVERFLOW -2 9 #define MAXSIZE 100 10 typedef int Status; 11 typedef char SElemType; 12 typedef struct 13 { 14 SElemType *base; 15 SElemType *top; 16 int stacksize; 17 } SqStack; 18 19 //算法:顺序栈的初始化 20 Status InitStack(SqStack &S) 21 { 22 // 构造一个空的顺序栈 S 23 S.base = new SElemType[MAXSIZE]; //将base指向新申请的栈数组中 24 if(!S.base) exit(OVERFLOW); //申请失败,则异常退出 25 S.top = S.base; //将栈底指针赋给栈顶指针,表示空栈 26 S.stacksize = MAXSIZE; //栈能容纳的最大容量 27 return OK; //申请成功 28 } 29 //算法:顺序栈的入栈 30 Status Push(SqStack &S, SElemType &e) 31 { 32 if(S.top-S.base==S.stacksize) //如果栈满 33 return ERROR; 34 // 插入元素e为新的栈顶元素 35 *S.top++ = e; //先将元素压栈,栈顶指针指向下一个地址 36 return OK; //入栈成功 37 } 38 //算法:顺序栈的出栈 39 Status Pop(SqStack &S, SElemType &e) 40 { 41 // 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR 42 if (S.base==S.top) //表示空栈 43 return ERROR; //返回错误 44 e = *--S.top; //先将栈顶指针减1,再取栈顶元素 45 return OK; //出栈成功 46 } 47 //算法:判断是否为回文 48 int HuiWen(SElemType *ch, int length) //ch接收回文字符串数组的基地址,length接收回文字符串长度 49 { 50 SqStack S; 51 SElemType x; 52 int i,j, m = length/2; 53 InitStack(S); //初始化栈S 54 for(i=0;i<m;++i) //先将字符数组前一半的元素压入栈中 55 Push(S,ch[i]); 56 for(j=length-m;j<length;j++){ //从一半后开始,会跳过奇数个数最中间那个数的比较 57 if(Pop(S,x) && x!=ch[j])break; //如果出栈成功 且出栈元素不和当前字符对应,则跳出 58 } 59 if(j!=length)return ERROR; //如果j不等于length 说明不是回文,返回0 60 return OK; //否则返回1 61 } 62 63 int main() 64 { 65 cout << "\n********************判断是否为回文************************\n\n"; 66 int i, length, flag = 1; 67 while (flag) 68 { 69 cout << "请输入一个数,代表回文字符串的长度:"; 70 cin >> length; //length存放回文字符串长度 71 cout << "请输入" << length << "个字符:"; 72 SElemType *ch = new SElemType[2 * MAXSIZE]; //ch存放回文字符串数组的基地址 73 for (i = 0; i < length; i++) 74 cin >> ch[i]; //给数组ch 输入用以判断的字符串 75 cout << "您要判断的字符串是:"; 76 for (i = 0; i < length; i++) 77 cout << ch[i]; //显示数组ch 中的字符串 78 if (HuiWen(ch, length)) 79 cout << ",此字符串是回文!\n\n" ; //HuiWen()是判断回文的函数,是回文返回1 ,不是回文返回0 80 else 81 cout << ",此字符串不是回文!\n\n" ; 82 cout << "继续判断,输入1,否则输入0:"; 83 cin >> flag; 84 } 85 return 0; 86 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!