C语言怎么用顺序栈实现回文序列判断
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章将为大家详细讲解有关C语言怎么用顺序栈实现回文序列判断,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。我是采用了两个栈值得比较大小判断得(可能比较浪费空间但是
千家信息网最后更新 2025年01月20日C语言怎么用顺序栈实现回文序列判断
这篇文章将为大家详细讲解有关C语言怎么用顺序栈实现回文序列判断,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
我是采用了两个栈值得比较大小判断得(可能比较浪费空间但是代码我感觉简单一点)
首先是定义一个栈的结构元素,由于是字符串类型就直接定义一个char的数组就可以:.
typedef struct stack{ char data[MAX_SIZE]; //储存字符串// int top; //记录栈顶// }SeqStack;
下来就是初始化,我这里是用的耿国华老师的方法就直接给一个top元素指向栈顶,传入的指针地址:.
void Initstack(SeqStack *S) //初始化栈,让top指向栈顶// { S->top=-1;}
下面就是创建顺序栈了,元素只要没满就一直可以入住:
int Push(SeqStack *S,char x) //压栈,只要top小于MAX_SIZE-1就可以继续入栈// { if(S->top<=MAX_SIZE-1) { S->top++; S->data[S->top]=x; }else{ return -1;; }}
下面是核心函数,操作实现回文序列的判断,我注释的比较清楚直接看就可以了:
void Pop(SeqStack *S) //出栈操作,也是最主要的操作// { SeqStack *p; p=(SeqStack*)malloc(sizeof(SeqStack)); //建立一个新的空栈,由于是指针类型要分配动态地址// Initstack(p); //给新的栈进行初始化// int i=S->top/2; //i用来分割两个字符串,将第二个字符串赋给新的空栈// int j=i-1; //j用来记录除了@之外的其他字符数量大小// while(S->top!=i) //开始对空栈进行赋值,对原来的栈开始清空(清空一般大小)// { p->top++; p->data[p->top]=S->data[S->top]; S->top--; } S->top=S->top-2; //让原来的栈直接指向数字,跨过了字符@// for(int k=0;kdata[S->top]==p->data[p->top]) //由于栈的特点先进后出,所以新栈的存储顺序和去掉@字符之后的旧栈的存储顺序是一样的,所以这里直接比较// { j--; //j是定义需要比较字符的大小,只要两个栈的元素ASCLL相等j就减一,如果全部相等j为0,该字符串就是互为回文序列// } S->top--; //两个top指针向下值// p->top--; if(j==0) //判断// { printf("两个字符串互为回文序列!"); } } if(j!=0) { printf("两个字符串不互为回文序列!"); } free(p); //free掉分配的空间// }
下面附上整个代码:
#include#include #define MAX_SIZE 100typedef struct stack{ char data[MAX_SIZE]; //储存字符串// int top; //记录栈顶// }SeqStack;void Initstack(SeqStack *S) //初始化栈,让top指向栈顶// { S->top=-1;}int Push(SeqStack *S,char x) //压栈,只要top小于MAX_SIZE-1就可以继续入栈// { if(S->top<=MAX_SIZE-1) { S->top++; S->data[S->top]=x; }else{ return -1;; }}void Pop(SeqStack *S) //出栈操作,也是最主要的操作// { SeqStack *p; p=(SeqStack*)malloc(sizeof(SeqStack)); //建立一个新的空栈,由于是指针类型要分配动态地址// Initstack(p); //给新的栈进行初始化// int i=S->top/2; //i用来分割两个字符串,将第二个字符串赋给新的空栈// int j=i-1; //j用来记录除了@之外的其他字符数量大小// while(S->top!=i) //开始对空栈进行赋值,对原来的栈开始清空(清空一般大小)// { p->top++; p->data[p->top]=S->data[S->top]; S->top--; } S->top=S->top-2; //让原来的栈直接指向数字,跨过了字符@// for(int k=0;k data[S->top]==p->data[p->top]) //由于栈的特点先进后出,所以新栈的存储顺序和去掉@字符之后的旧栈的存储顺序是一样的,所以这里直接比较// { j--; //j是定义需要比较字符的大小,只要两个栈的元素ASCLL相等j就减一,如果全部相等j为0,该字符串就是互为回文序列// } S->top--; //两个top指针向下值// p->top--; if(j==0) //判断// { printf("两个字符串互为回文序列!"); } } if(j!=0) { printf("两个字符串不互为回文序列!"); } free(p); //free掉分配的空间// }int main(){ SeqStack S; char x; int m=0; Initstack(&S); printf("请输入第一串字符\n"); while(m!=2) //因为只需要输入两个字符串的判断,判断条件为m!=2// { scanf("%c",&x); if(x=='@') //输入@后表明第一个字符串结束// { m++; if(m==1) { printf("请输入第二串字符:\n"); } } Push(&S,x); } Pop(&S); return 0;}
下面加一个例子:
判断3+1与1+3是否为回文序列
关于"C语言怎么用顺序栈实现回文序列判断"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
字符
字符串
两个
回文
序列
顺序
大小
元素
指向
指针
就是
分配
存储
输入
地址
空间
篇文章
类型
语言
代码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器人员管理制度
应用服务器功能特点图
高清工具软件开发定制
洛阳游戏软件开发
中国国产服务器
sql数据库入门基础知识下载
华为5G蜂窝网络技术
测绘工程软件开发
软件开发招聘考试题库
我的世界游乐场的服务器
it行业做软件开发
swing动态数据库
乐富网络技术
锐洋网络技术有限公司
湖州常用网络技术
服务器光模块订做
能在电脑上自学软件开发吗
架设服务器 成本
滦南监控网络技术人员
ssm上传图片到数据库
软件开发岗岗位要求
软件开发uat谁负责
为什么说网络安全特别重要
软件开发课程故事夏天
网络安全周宣传活动美篇
好-数据库置疑恢复之经典
网站数据库sql权限
代开普票软件开发税率多少
数据库前端设计
云南项目软件开发服务商