【数据结构与算法】判定给定的字符向量是否为回文算法
题目:
Qestion: 试写一个算法判定给定的字符向量是否为回文。
回文解释: 回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。
主要思路:
- 因为数据要求不是很严格并且是一个比较简单的题,因此偷懒采用了用
线性表
来表示栈
,用的是数组来存储字符串,定义了一个结构体Strack
,里面含有栈顶指针top
和栈内元素个数cnt
。 - 创建一个字符数组
char c [max]
,用scanf
将用户输入的字符串传入该char
数组。 - 统计用户输入字符串的长度,结束标志位
char c [i] = '\0'
,得出该字符串的总长度。 - *将用户输入的字符串一半入栈(需要分字符个数位为奇还是为偶两种情况)。
- *栈内元素依次与从
char c [max]
中间字符的下一位(这里也要分奇偶)开始比较判读该字符串是否为回文字符串。
数据结构与定义:
#define max 20struct Stack
{int cnt; // 统计栈中共有几个元素int top; // 指向栈顶元素的指针
};
Stack A; //字符串的栈
char stack[max];//数组实现的栈的存储结构
char c[max];//用于存放用户输入的字符串
主要操作函数:
//置空栈,默认若栈中没有元素则栈顶指针指向char数组第一位
void InitStack(Stack &S)
{S.top = 0;
}//计算用户输入字符串的长度
int StringLength(char a[])
{int length = 0;for (int i = 0; i < max; i++){if (a[i] != '\0') // 当遇到`\0`时循环结束{length++;}elsebreak;}return length;
}//将用户输入的字符串一半存入栈中,其中char a[]为用于存放用户输入的字符串数组
//S为栈结构体包括栈顶指针和栈内元素个数,length为字符串的长度,char stack为
//用数组实现的栈,用于存储入栈的元素
void PushStringInStack(char a[], Stack &S, int length, char stack[])
{if (length % 2 == 0) //若字符的个数为偶数,则将其一半入栈{for (int i = 0; i < length / 2; i++){stack[S.top] = a[i]; // 将a[i]压入栈中S.top = i + 1; //栈顶指针上移S.cnt++; //栈内元素个数加一}}else // 若字符的个数为奇数,则将其总数减一的一半个数的字符入栈{for (int i = 0; i < (length - 1) / 2; i++){stack[S.top] = a[i]; // 同上S.top = i + 1;S.cnt++;}}
}//判断用户输入的字符是否为回文串
bool IsPalindrome(char stack[], Stack S, char a[], int length)
{int j;if (length % 2 == 0)j = length / 2;elsej = (length / 2) + 1;for (int i = (S.top - 1); i > 0; i--){if (stack[i] == a[j]){j = j + 1;}elsereturn false;}return true;
}
图解:
完整代码
#include <stdio.h>
#include <string.h>
#define max 20
struct Stack
{int cnt; int top;
};bool IsPalindrome(char stack[], Stack S, char a[], int length)
{int j;//j 也可以用S.cnt替代,这只是另一种表示方法,结果是一样的if (length % 2 == 0)j = length / 2;elsej = (length / 2) + 1;for (int i = (S.top - 1); i > 0; i--){if (stack[i] == a[j]){j = j + 1;}elsereturn false;}return true;
}int StringLength(char a[])
{int length = 0;for (int i = 0; i < max; i++){if (a[i] != '\0'){length++;}elsebreak;}return length;
}void InitStack(Stack &S)
{S.top = 0;
}void PushStringInStack(char a[], Stack &S, int length, char stack[])
{if (length % 2 == 0){for (int i = 0; i < length / 2; i++){stack[i] = a[i];S.top = i + 1;S.cnt++;}}else{for (int i = 0; i < (length - 1) / 2; i++){stack[i] = a[i];S.top = i + 1;S.cnt++;}}
}int main()
{Stack A;char stack[max];InitStack(A);char c[max];scanf("%s", c);int length = StringLength(c);PushStringInStack(c, A, length, stack);if (IsPalindrome(stack, A, c, length))printf("true");elseprintf("false");return 0;
}
代码图片
结束语
因为是算法小菜,所以提供的方法和思路可能不是很好,请多多包涵~如果有疑问欢迎大家留言讨论,你如果觉得这篇文章对你有帮助可以给我一个免费的赞吗?我们之间的交流是我最大的动力!
相关文章:

【数据结构与算法】判定给定的字符向量是否为回文算法
题目: Qestion: 试写一个算法判定给定的字符向量是否为回文。 回文解释: 回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。 主要思路: 因为数据要求不是很严格并且是一个比较简单的…...

考研数二第十七讲 反常积分与反常积分之欧拉-泊松(Euler-Poisson)积分
反常积分 反常积分又叫广义积分,是对普通定积分的推广,指含有无穷上限/下限,或者被积函数含有瑕点的积分,前者称为无穷限广义积分,后者称为瑕积分(又称无界函数的反常积分)。 含有无穷上限/下…...

【论文总结】理解和减轻IoT消息协议的安全风险
理解和减轻IoT消息协议的安全风险介绍概述前置知识威胁模型MQTT IoT通信安全分析未授权的MQTT消息未授权的Will消息未经授权的保留消息MQTT会话管理故障未更新的会话订阅状态未更新的会话生命周期状态未经身份验证的 MQTT 身份客户端id劫持MQTT Topics的授权MQTT Topic不安全的…...
SpringBoot基础入门
一、概述 Spring Boot是一个开源的Java框架,它是基于Spring框架的基础之上创建的。Spring Boot可以帮助开发人员更快地创建Spring应用程序,并以最小的配置要求来运行它们。Spring Boot可以用于构建各种类型的应用程序,包括Web应用程序、RESTful API、批处理作业、消息传递应…...
jar 包与 war 包区别
1、war是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块;jar一般只是包括一些class文件,在声明了Main_class之后是可以用java命令运行的。 2、war包是做好一个web应用后,通常是网站,打成包部署…...

【数据结构:复杂度】时间复杂度
本节重点内容: 算法的复杂度时间复杂度的概念大O的渐进表示法常见时间复杂度计算举例⚡算法的复杂度 算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的&…...

京东pop店铺订单导出
下载安装与运行 下载、安装与运行 语雀 特别提醒 只能导出已登录店铺的订单导出的收件人手机号是虚拟号 功能 主要是方便线下工厂发货的店主 所见即所得的导出自由选择导出项自由排序Excel导出列顺序导出过程中有进度提示,用户可以随时提前中止 什么是所见即所…...

论文阅读:Towards Stable Test-time Adaptation in Dynamic Wild World
今天阅读ICLR 2023 ——Towards Stable Test-time Adaptation in Dynamic Wild World Keywords:Test-time adaptation (TTA); 文章目录Towards Stable Test-time Adaptation in Dynamic Wild WorldProblem:motivation:Contributio…...
2022国赛27:Linux-1时间服务chrony配置
大赛试题内容: 3.利用chrony配置Linux-1为其他Linux主机提供时间同步服务。 解答过程: 安装chrony服务[root@cs1 ~]# yum -y install chrony 配置/etc/chrony.conf文件[root@cs1 ~]# vi /etc/chrony.conf 7行改为 server 10.10.70.101 iburst 23行改为 去掉#号 allow 1…...

Java——二维数组中的查找
题目链接 牛客在线oj题——二维数组中的查找 题目描述 在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二…...
Android 9.0 添加关机铃声功能实现
1.前言 在9.0的系统rom定制化开发中,在原生系统中,关于开机铃声和关机铃声是默认不支持的,系统默认支持开机动画和关机动画等功能,所以关于增加开机铃声和关机 铃声的相关功能,需要自己增加相关的关机铃声功能 2.添加关机铃声功能实现的核心类 frameworks\base\cmds\boo…...
IPv4 和 IPv6 的组成结构和对比
IPv4 和 IPv6 的组成结构和对比IPv4IPv6互联网协议 (IP) 是互联网通信的基础,IP 地址是互联网上每个设备的唯一标识符。目前最常用的 IP 协议是 IPv4,它已经有近 30 年的历史了。然而,IPv4 存在一些问题,例如: 地址空间不足:IPv4 …...
Spring的事务管理
Spring的事务管理Spring的事务管理1、事务的回顾【1】事务的定义【2】事务的ACID原则2、spring事务API介绍【了解】【1】PlatformTransactionManager【1.1】PlatformTransactionManager作用【1.2】PlatformTransactionManager接口【1.3】PlatformTransactionManager实现类【2】…...
MCAL知识点(十六):VADC驱动配置详解(理论基础篇)
目录 1、概述 2、EB配置 2.1、通用界面配置 2.1.1、General 2.1.2、AdcConfigSet_0 2.1.3、AdcGlobinputClass 2.1.4、AdcHwUn...

MySQL--库的操作--校验规则对于数据库的影响--0409
目录 1.库的基础操作 查看数据库 创建数据库 删除数据库 查看建库语句 修改数据库 2.字符集和字符集校验规则 2.1 查看系统默认字符集以及校验规则 2.2 使用特定的字符集创建数据库 2.3 不同校验规则对数据库的影响 2.3.1 大小写验证 2.3.2 排序验证 3.备份和恢复 3.1…...

markdown-it基本使用
markdown-it能够将markdown语法的内容转换为html内容,这样我们使用markdown语法写的笔记,就可以转换作为网页使用了 Markdown语法 Markdown语法图文全面详解(10分钟学会) 基础使用 安装markdown-it npm install markdown-it --save使用markdown-it …...
CMake入门教程【核心篇】8.3对象库
文章目录 知识点实例代码目录代码实现知识点 add_library(libhello OBJECT src/hello.cpp)使用OBJECT 参数可以把对象传入到libhello 中,且不会生成.lib文件 使用变量$<TARGET_OBJECTS:libhello>即可获取,比较实用 实例 代码目录 |-📁prj10 |-- 🎴CMakeLists…...

单片机_CT107D训练平台电路原理图\蓝桥杯训练板\IO扩展模块\74HC138译码器
74HC138译码器(实现3个IO口控制8个引脚实现IO口的扩展) 配置信号放大模块,可以对输入的低电压模拟信号进行放大; 配置 138 译码器,可以做译码实验; 外设可以用存储器映射方式访问,也可以直接控…...
Rabbitmq消息确认机制
1.生产者确认机制 确认消息发送到交换机--Confirm方式 1.1普通Confirm方式 private static void sendMsg(Channel channel) throws IOException, InterruptedException { //开启确认机制 channel.confirmSelect(); //发送消息到exchange St…...

FinClip 云开发实践(附小程序demo)
在开发一个小程序时,除了考虑界面功能逻辑外,还需要后端的数据支持,开发者需要提前考虑服务器、存储和数据库等相关需求的支持能力,此外还可能需要花费时间精力在部署应用、和依赖服务的建设上。 因此,腾讯小程序为…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...