【数据结构与算法】判定给定的字符向量是否为回文算法

news2024/11/27 18:24:45

题目:

  Qestion:试写一个算法判定给定的字符向量是否为回文。

  回文解释: 回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。


主要思路:

  1. 因为数据要求不是很严格并且是一个比较简单的题,因此偷懒采用了用线性表来表示,用的是数组来存储字符串,定义了一个结构体Strack,里面含有栈顶指针top和栈内元素个数cnt
  2. 创建一个字符数组char c [max],用scanf将用户输入的字符串传入该char数组。
  3. 统计用户输入字符串的长度,结束标志位char c [i] = '\0',得出该字符串的总长度。
  4. *将用户输入的字符串一半入栈(需要分字符个数位为奇还是为偶两种情况)。
  5. *栈内元素依次与从char c [max] 中间字符的下一位(这里也要分奇偶)开始比较判读该字符串是否为回文字符串。

数据结构与定义:

#define max 20

struct 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++;
		}
		else
			break;
	}
	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;
	else
		j = (length / 2) + 1;
	for (int i = (S.top - 1); i > 0; i--)
	{
		if (stack[i] == a[j])
		{
			j = j + 1;
		}
		else
			return 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;
	else
		j = (length / 2) + 1;
	for (int i = (S.top - 1); i > 0; i--)
	{
		if (stack[i] == a[j])
		{
			j = j + 1;
		}
		else
			return false;
	}
	return true;
}

int StringLength(char a[])
{
	int length = 0;
	for (int i = 0; i < max; i++)
	{
		if (a[i] != '\0')
		{
			length++;
		}
		else
			break;
	}
	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");
	else
		printf("false");
	return 0;
}



代码图片

请添加图片描述


结束语

  因为是算法小菜,所以提供的方法和思路可能不是很好,请多多包涵~如果有疑问欢迎大家留言讨论,你如果觉得这篇文章对你有帮助可以给我一个免费的赞吗?我们之间的交流是我最大的动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/423526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试—基础篇

软件测试—基础篇&#x1f50e;软件测试的生命周期&#x1f50e;如何描述一个BUG&#x1f50e;如何定义BUG 的级别&#x1f50e;BUG 的生命周期&#x1f50e;测试的执行与管理测试的执行与管理如何发现更多的BUG&#x1f50e;产生争执怎么办&#x1f50e;结尾&#x1f50e;软件…

基于PaddlePaddle的词向量实战 | 深度学习基础任务教程系列

词向量是自然语言处理中常见的一个操作&#xff0c;是搜索引擎、广告系统、推荐系统等互联网服务背后常见的基础技术。 在这些互联网服务里&#xff0c;我们经常要比较两个词或者两段文本之间的相关性。为了做这样的比较&#xff0c;我们往往把词表示成计算机适合处理的方式。最…

CRM管理系统有哪些优势?在企业中有什么作用?

CRM管理系统有哪些优势&#xff1f;在企业中有什么作用&#xff1f; 其实&#xff0c;公司上crm管理系统不仅不会增加员工负担&#xff0c;还能提升员工满意度、赋能员工。当然&#xff0c;前提是一款优质的CRM管理系统。 那么&#xff0c;一款优质的CRM管理系统一般具备哪些…

45.Promise,async,await

目录 1 Promise 1.1 状态 1.2 then 1.3 任务的优先级 1.4 连续then 1.4.1 then()的返回值也是一个Promise对象 1.4.2 默认情况下&#xff0c;在第一个then之后&#xff0c;会执行第二个then的成功函数 1.4.3 then的value可以用返回值传递 1.4.4 通过then的返…

为什么老年人会经常性出现吃饭呛咳的情况 什么因素导致的

其实很多老年人在吃饭或是喝水的时候&#xff0c;都存在吞咽困难的问题&#xff0c;呛咳或者是忘了如何下咽。其实在老年人群体当中&#xff0c;这也是一种较为常见的现象&#xff0c;但是很多人都把这种现象当回事。 对于呛咳的现象是很好判断的&#xff0c;在家里老人喝水或是…

专注区块链底层技术突破,“复杂美”用技术开源推动产业未来

杭州复杂美科技有限公司&#xff08;以下简称&#xff1a;复杂美&#xff09;成立于2008年&#xff0c;是一家致力于高性能撮合技术研发的区块链底层技术提供商&#xff0c;专注于区块链撮合系统、区块链清算系统的应用与推广。 公司于2013年启动区块链、智能合约的研发应用&am…

PyTorch 深度学习实战 | 基于 ResNet 的花卉图片分类

“工欲善其事&#xff0c;必先利其器”。如果直接使用 Python 完成模型的构建、导出等工作&#xff0c;势必会耗费相当多的时间&#xff0c;而且大部分工作都是深度学习中共同拥有的部分&#xff0c;即重复工作。所以本案例为了快速实现效果&#xff0c;就直接使用将这些共有部…

36岁大龄程序员被裁,找了2个月工作,年包从100万降到50万,要不要接?

为了找到工作&#xff0c;你愿意接受降薪多少&#xff1f;一位36岁的杭州程序员问&#xff1a;36岁被裁&#xff0c;找了2个月工作&#xff0c;年包从100万降到50万&#xff0c;真心纠结&#xff0c;要不要接&#xff1f;网友们分成了旗帜鲜明的两派&#xff0c;一派人认为不要…

【数学模型】欧拉公式和证明

一、说明 在图型学中&#xff0c;欧拉公式很有用处&#xff0c;比如皮克定律也可以用欧拉公式证明。本篇介绍欧拉公式的定义和三个证明过程。 二、欧拉公式 在任何一个规则球面地图上&#xff0c;用 R记区域个 数 &#xff0c;V记顶点个数 &#xff0c;E记边界个数 &#xff0c…

BGP基础知识

今天海翎光电的小编主要介绍一下BGP的相关基础知识&#xff0c;文章浅显易懂&#xff0c;适合对BGP完全没有了解的同学。 BGP介绍 边界网关协议BGP&#xff08;Border Gateway Protocol&#xff09;是一种实现自治系统AS&#xff08;Autonomous System&#xff09;之间的路由可…

【cmake篇】选择编译器及设置编译参数

实际开发的过程中&#xff0c;可能有多个版本的编译器&#xff0c;不同功能可能需要设置不同的编译参数。 参考博客链接&#xff1a;选择编译器及设置编译器选项 目录 一、选择编译器 1、查看系统中已有的编译器 2、选择编译器的两种方式 二、设置编译参数 1、add_compi…

CSSOM和CSSOM View

CSSOM和CSSOM View这两个我都不是熟悉的领域。 1.描述样式表和规则等 CSS 的模型部分&#xff08;CSSOM&#xff09; cssom中document.styleSheets &#xff1a;获取文档中所有的样式&#xff08;只读&#xff09;&#xff0c;这个不常见&#xff0c;不做过多的介绍 2.元素视图…

科普|汽车毫米波雷达的规定和标准 微功率短距离无线电发射SRRC认证

01 — 24-24.25 GHz 上一篇提到&#xff0c;在我国《微功率短距离无线电发射设备目录和技术要求》中&#xff0c;保留了24-24.25 GHz的频段作为H类设备&#xff0c;可以用于汽车雷达&#xff0c;它的发射功率限值是&#xff1a;20mW (e.i.r.p)&#xff0c;近似为13dBm。除了…

【Open CASCADE -生成MFC和QT事例方式】

源代码目录 adm目录&#xff1a;包含编译OCCT的相关工程; adm/cmake目录&#xff1a;包含使用CMake构建OCCT的相关处理脚本; adm/msvc目录&#xff1a;包含window平台 Visual C 2010, 2012, 2013, 2015, 2017 and 2019等版本的32/64平台solutinon文件; data目录&#xff1a; 包…

ESP32驱动1.28寸GC9A01播放视频(二、程序说明和效果展示)

ESP32驱动1.28寸GC9A01播放视频&#xff08;二、程序下载和效果展示&#xff09;1.28寸GC9A01屏幕屏幕引脚定义程序说明程序更改1、Arduino_DataBus *bus和Arduino_GC9A01 *gfx要改成ESP32匹配的2、SPI库的SPI.cpp文件中的“SPIClass::begin”函数中&#xff0c;引脚定义需要跟…

分布式跟踪系统

分布式跟踪系统 背景 当代的互联网的服务&#xff0c;通常都是用复杂的、大规模分布式集群来实现的。互联网应用构建在不同的软件模块集上&#xff0c;这些软件模块&#xff0c;有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器&#xff0…

护眼灯真的可以保护眼睛吗?推荐五款达到护眼级别的灯

护眼灯是可以起到一定的保护视力的作用。 普通的台灯的出现是为了照明&#xff0c;它的功能只要照明。像眩光、频闪、蓝光等是普通台灯所存在的问题&#xff0c;而这些问题会造成我们的眼睛近视&#xff0c;所以在我国近年来青少年近视率越来越高的重要原因之一。 护眼灯就优化…

对比斐波那契和快排时间复杂度

斐波那契数列时间复杂度 ​ // 计算斐波那契递归Fib的时间复杂度&#xff1f; long long Fib(size_t N) {if(N < 3)return 1;return Fib(N-1) Fib(N-2); }Fib()递归高度是N&#xff0c;那它最后一层就是2^(N-1) 如果N50&#xff0c;最后一层是2^(49)一个恐怖的值 更恐怖…

手撕Udp套接字|实现群聊通信|实现Windows Linux通信交互

​ 专栏和Git地址 操作系统https://blog.csdn.net/yu_cblog/category_12165502.html?spm1001.2014.3001.5482UdpSockethttps://github.com/Yufccode/BitCode/tree/main/Linux/%E4%BB%A3%E7%A0%81/0215Udp%E5%A5%97%E6%8E%A5%E5%AD%97 README 本项目通过Linux套接字编程&…

AiDD AI+软件研发数字峰会开启编程新纪元

随着OpenAI 推出全新的对话式通用人工智能工具——ChatGPT火爆出圈后&#xff0c;人工智能再次受到了工业界、学术界的广泛关注&#xff0c;并被认为向通用人工智能迈出了坚实的一步&#xff0c;在众多行业、领域有着广泛的应用潜力&#xff0c;甚至会颠覆很多领域和行业&#…