数据结构之用堆栈判断回文

2023-05-16

回文判断

回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。编写一个程序,使用栈判定给定的字符序列是否为回文。

输入格式:
输入待判断的字符序列,按回车键结束,字符序列长度<20。

输出格式:
若字符序列是回文,输出“YES”;否则,输出“NO”。

输入样例:
abdba

解题思路

首先,我们要明白堆栈是具有一定操作约束的线性表,它的特点是只能在一端(栈顶)做插入或者删除操作,即里面的元素遵循后入先出的规则。
这样,这道题的解题思路就有了。给我们一段回文数字,我们先按顺序把它们压入栈中,由于它取元素的顺序是后入先出的,我们再一个个把它们取出来,这时候取出的元素顺序刚好是原始数据的反序。我们只需要把从栈中取出的元素依次与原始序列对比,判断其是否一致,就能判断该字符序列是否是回文了。(提示:比较时我们只需要比较序列的一半就可以啦,相信爱观察的你已经发现了)

源代码

#include<stdio.h>
#define SIZE 20 /*定义回文字符的最大长度*/
typedef struct SNode *Stack;
typedef char ElemenType;
struct SNode{
    ElemenType data;
    Stack next;
};
/*创建一个空栈*/
Stack createStack(){
    Stack s;
    s=(Stack)malloc(sizeof(struct SNode));
    s->next=NULL;
    return s;
}
/*判断栈是否为空*/
int isEmpty(Stack s){
    return (s->next==NULL);
}
/*向栈中放入元素*/
void Push(ElemenType item,Stack s){
    Stack p;
    p=(Stack)malloc(sizeof(struct SNode));
    p->next=s->next;
    s->next=p;
    p->data=item;
}
/*取出栈中元素*/
ElemenType Pop(Stack s){
    Stack p;
    ElemenType top;
    if(isEmpty(s)){
        printf("栈为空!");
        return NULL;
    }else{
    p=s->next;
    s->next=p->next;
    top=p->data;
    free(p);
    return top;
    }
}
int main(){
    Stack s;
    int i,j;
    ElemenType a[SIZE];
    gets(a);               //输入回文字符
    s=createStack();       //初始化栈
    for(i=0;a[i]!='\0';i++){
        Push(a[i],s);      //将元素一个个压入栈中
    }
    for(j=0;j<=i/2;j++){   //只需要比较一半长度即可
        if(a[j]!=Pop(s)){  //将原序列的每个元素与取出的元素相比较
            printf("NO");
            return 0;
        }
    }
    printf("YES");
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构之用堆栈判断回文 的相关文章

  • 记事本写c语言

    大家好 xff0c 欢迎来到有用无用栏目 xff0c 今天给大家演示一下用记事本写c语言 xff0c 0 xff1a 操作视频 点击观看 1 xff1a 编译过程 首先 xff0c 要明白c语言是怎么可以运行的 源文件 c gt 预处理 i
  • gdb调试C语言程序

    为什么要调试程序 xff1f 很常见的 xff1a 1 xff1a 在程序的某一行你想知道一个变量的值 2 xff1a 你想知道程序运行到哪里异常了 接下来介绍gdb调试器的简单用法 xff0c b break xff1a 设置断点 r r
  • cscope+ctags of vimrc

    span class token keyword if span filereadable span class token punctuation span span class token string 34 etc vim vimrc
  • 有用的samba配置文件

    span class token punctuation span guxinhua span class token punctuation span span class token assign left variable path
  • redha笔记本最小安装,打开wifi,搭建gitlab

    打开wifi yum span class token function install span NetworkManager systemctl start NetworkManager dispatcher service yum s
  • Ubuntu 16.04登录后进入蓝屏的解决措施

    今天启动Ubuntu 16 04系统后 xff0c 在显示登录界面时 xff0c 颜色和平时相比更加暗淡一些 xff0c 输入密码后 xff0c 一直停留在蓝屏界面 xff08 我当时没有拍照 xff0c 借用网上一张图片说明 xff0c
  • gitlab通过令牌获取issue,写入xls

    1 xff1a 创建令牌 在设置里面创建 2 xff1a 根据项目和用户名发送curl命令测试 xff1a curl header PRIVATE TOKEN glpat R N9x4ssboy5 ti7RyjC http 192 168
  • VMware虚拟机安装centos7,第一次登录时输入正确的密码仍提示抱歉,没有工作,请再试一遍

    使用VMware虚拟机安装centos7 xff0c 首次登录时已经输入了正确的密码仍然提示 34 sorry that didn t work please try again 34 输入密码时使用物理键盘 xff08 有的说输入数字时要
  • Day_01_服务器硬件常识与redhat环境基础配置

    服务器的应用场景 常见的三种文件共享服务 xff1a SMB FTP CMS 数据库 xff1a 管理和使用 xff0c 增删改查 xff0c 授权 xff0c 改授权 邮件 xff1a 正式的沟通交流都是以邮件通知为主 web serve
  • Java基本数据类型

    四大类 1 整型 byte short int long 2 浮点型 float double 3 字符型 char 4 布尔型 boolean
  • 自动拆装箱

    自动装箱就是Java自动将原始类型值转换成对应的对象 xff0c 比如将int的变量转换成Integer对象 xff0c 这个过程叫做装箱 xff0c 反之将Integer对象转换成int类型值 xff0c 这个过程叫做拆箱 因为这里的装箱
  • string为会么不可变,String、StringBuilder、StringBuffer的区别

    String 类中使用 final 关键字字符数组保存字符串 xff0c 所以 String 对象是不可变的 而StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类 xff0c
  • JAVA IO流

    IO常用类 文件流 xff1a FileInputStream FileOutputStream xff0c FileReader FileWriter 这四个类是专门操作文件流的 xff0c 用法高度相似 xff0c 区别在于前面两个是操
  • JAVA反射

    JAVA反射机制是在运行状态中 xff0c 对于任意一个类 xff0c 都能够知道这个类的所有属性和方法 xff1b 对于任意一个对象 xff0c 都能够调用它的任意一个方法和属性 xff1b 这种动态获取的信息以及动态调用对象的方法的功能
  • java 哪些源码需要细看

    String Integer Long Enum Big ThreadLocal CloseLoader ArrayList amp LinkedLis Map HashMap Set
  • 算法中时间复杂度概括——o(1)、o(n)、o(logn)、o(nlogn)

    O后面的括号中作为一个函数 xff0c 指明某个算法的耗时 耗空间与数据增长量之间的关系 其中的n代表输入数据的量 比如时间复杂度为O n xff0c 就代表数据量增大几倍 xff0c 耗时也增大几倍 比如常见的遍历算法 再比如时间复杂度O
  • 怎么禁止/开启Ubuntu自动更新升级

    当你打开Ubuntu系统时经常会弹出软件更新升级提示框 xff0c 因为Ubuntu包括上面装的很多软件也都是开源系统 xff0c 更新升级是很频繁的 xff0c 对于经常弹出的更新提示无非是两种应对措施 xff0c 要么安装 xff0c
  • 六大设计模式

    单一职责 开闭原则 李氏替换原则 LSP 门面的实现 依赖倒转原则 DIP 服务指向契约 契约绑定实现 接口隔离原则 ISP 接口对应一种角色 最少知道原则 类之间的弱耦合 需要反复度量
  • centos安装jdk

    1 下载自己系统对应版本 2 到该文件所在目录执行命令 rpm ivh jdk 8u221 linux x64 rpm 3 默认安装在 usr java jdk1 8 0 221 amd64目录下 4 环境变量配置 xff1a cd etc

随机推荐

  • ESC上搭建spring boot

    一 打包项目 a 单击IDEA右上角Maven b 依次双击 demo gt Lifecycle gt package xff0c 开始打包 执行结果如下 xff0c 图中标记位置为打包后jar包的路径 二 运行ECS上的Java项目 执行
  • win10 安装配置mysql8

    1 下载 https tomcat apache org 选择自己需要的版本 2解压 3配置环境变量 略 4配置my ini 在 MYSQL HOME 下新建my int文件 xff0c 内容如下 span class token punc
  • idea调用javap

    idea 配置javap 具体参数设置如下 program span class token variable JDKPath span span class token punctuation span bin span class to
  • Rust Web(一)—— 自建TCP Server

    前段时间小小学习了一下Rust的基础内容 xff0c 出于学习Web开发的需求 xff0c 也为巩固学过的Rust基础 xff0c 就尝试记录一下自己学习 Rust Web 的点滴 xff1b 实现环境 OS Ubuntu 14 0 IDE
  • ajax传递数组怎么传?ajax数组传递

    在我们平时的开发中 xff0c 经常会需要用到ajax xff0c 关于ajax是什么 xff0c 又该如何传递参数 xff0c 相信通过上几篇文章你们已经有所了解 但是 xff0c ajax中要如何传递数组你们又知道吗 xff1f 今天我
  • linux安装node和达梦数据库8

    PS 本次测试只是为了项目需要 xff0c 但是在部署和启动程序的时候发生了一系列的报错 xff0c 由此记录下来为日后作参考 安装达梦数据库 1 达梦数据库 DM8 简介 达梦数据库管理系统是武汉达梦公司推出的具有完全自主知识产权的高性能
  • pyqt5+mysql+多线程爬虫实现 python 携程机票爬虫 数据可视化

    基本目录 数据来源与获取方法数据来源网页分析 实现效果完整代码与说明文档 数据来源与获取方法 数据来源 携程机票查询https flights ctrip com online channel domestic 网页分析 我们的目的是要爬取
  • debian9.8添加iso为本地源

    1 临时添加 使用mount临时挂载 注意需要在root权限下操作 一 将系统镜像文件复制到电脑任意路径下 xff0c 我这里复制到 home路径下 二 自己创建一个挂载目录 xff0c 我创建的是 mnt cdrom目录 xff0c 命令
  • 剖析AVFrame

    AVFrame是FFmpeg中非常重要的数据结构 xff0c 其封装了解码后的媒体数据 在FFmpeg之中 xff0c 有几个比较重要的音视频概念 xff1a pixel format xff1a 表示像素格式 xff0c 图像像素在内存中
  • The package javax.swing is not accessible错误的三种解决办法,亲测有效

    万次阅读 xff0c 150 43 点赞 xff0c 如若对您有帮助 xff0c 请及时点赞 xff0c 不要白嫖 解决办法 xff1a 更换JRE系统库的版本解决办法 xff1a 另外一个比较暴力的解决办法是点击java swing 解决
  • error: binding reference of type int& to const int discards qualifiers

    span class token macro property span class token directive keyword include span span class token string lt iostream gt s
  • request for member in , which is of pointer type

    原因 其实就是因为结构体成员引用符 34 34 和指针的箭头运算符 gt 用错了 只要根据自己的代码把 点 和 gt 改回去就行了
  • 结构体对齐问题(转)

    一个结构体变量定义完之后 xff0c 其在内存中的存储并不等于其所包含元素的宽度之和 例一 xff1a span class token macro property span class token directive keyword i
  • java.net.SocketException: Broken pipe (Write failed)发生原因及其解决办法

    先运行B main 再运行A main 先运行B的main xff0c 然后由于B有accepte的执行 xff0c 所以B那块先阻塞 xff0c 然后点击执行A main的时候会执行A的socket连接 xff0c 然后B监听到了之后立即
  • Matlab进行多项式拟合

    觉得有用的先点赞后收藏 xff0c 不要只收藏不点赞 xff01 xff01 1 一个坐标系里面绘制多个函数图像 clear clc x span class token operator 61 span span class token
  • K-Means聚类算法及其python实现(已附上代码至本博客)

    目录 一 算法公式讲解二 算法流程三 算法实现代码四 代码结果分析五 K Means库函数六 K Means算法时间复杂度 一 算法公式讲解 对于 n代表了x有n维 xff0c x上标j表示第j维的特征 xff0c 下标i表示该向量是第i个
  • The server quit without updating PID file

    我本地Mac电脑爆的错误 xff01 xff01 xff01 总体解决办法有两个 xff0c 方法一 1 可能是 usr local MySQL data mysqld pid文件没有写的权限 解决方法 xff1a 给予权限 xff0c 执
  • Could not find artifact com.github.pagehelper:pagehelper-spring-boot:jar:1.4

    我的情况是导入1 4 2版本的pagehelper spring boot就爆错 xff0c 但是导入了1 3 0版本的pagehelper spring boot就不爆错了 xff0c 后面又导入了一次1 4 2版本的pagehelper
  • No primary or single public constructor found for interface java.util.List

    我的爆错原因是途中ids忘记标注注解 64 PathVariable了 xff0c 因为要传入一系列的整数的列表对象到路径 emps deleteEmps ids 中 xff0c 所以我这里就是加上注解 64 PathVariable就OK
  • 数据结构之用堆栈判断回文

    回文判断 回文是指正读反读均相同的字符序列 xff0c 如 abba 和 abdba 均是回文 xff0c 但 good 不是回文 编写一个程序 xff0c 使用栈判定给定的字符序列是否为回文 输入格式 输入待判断的字符序列 xff0c 按