【数据结构】判定给定的字符序列是否为回文

2023-05-16

文章目录

  • 产出:
  • 问题
  • 思路


产出:

CSDN 技术博客 1 篇
哔哩哔哩专栏1篇

问题

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

思路

总思路:将所有元素进栈,然后依次出栈与数组元素比较
具体步骤
1、键盘输入需要判断的字符串存放在数组中
2、将数组中的元素依次进栈
3、栈顶元素出栈与数组元素比较
效果相当于
a[3]
a[0]与a[2]比较
a[1]与a[1]比较
a[2]与a[0]比较

代码如下:

#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 1024//定义顺序栈的最大长度
#define n 1024//定义数组长度

typedef char elem;
typedef struct SqStack
{
	elem data[MAXSIZE];					  //创建数组栈
	int top;							  //栈顶指针
}SqStack;

//顺序栈初始化
int Init_SqStack(SqStack *&S)
{
	S = (SqStack*)malloc(sizeof(SqStack));//申请空间
	if(S == NULL)
	{
		printf("申请分配空间失败\n");
		return 0;						//失败返回0
	}
	S -> top = -1;						//将-1赋值给栈顶指针
	return 1;
}

//判断栈是否已满
int Full_SqStack(SqStack *S)
{
	if(S -> top == MAXSIZE -1)//数组由0开始计
	{
		return 1;			  //栈满返回1
	}
	else
	{
		return 0;			  //栈未满返回0
	}
}

//判断是否为空栈
int Empty_SqStack(SqStack *S)
{
	if(S -> top == -1)
	{
		return 1;			  //空栈返回1
	}
	else
	{
		return 0;			  //非空栈返回0
	}
}

//进栈
void Push_SqStack(SqStack *&S, elem e)
{
	if(Full_SqStack(S) == 1)		//判断栈是否已满
	{
		printf("栈已满,不能进行进栈操作\n");
		return;
	}
	S -> top++;						//栈顶指针+1
	S -> data[S -> top] = e;		//元素进栈
}

//出栈
int Pop_SqStack(SqStack *S, elem &e)
{
	if(Empty_SqStack(S) == 1)//判断是否为空栈
	{
		printf("该栈是空栈, 无数据元素\n");
		return 0;			//为空栈返回0,出栈失败
	}
	e = S -> data[S -> top];//栈顶元素出栈
	S -> top--;				//栈顶指针减一
	return 1;				//出栈成功返回1
}

//判断是否为回文
int Symmetry(elem a[])
{
	elem e;
	SqStack *S;
	Init_SqStack(S);		 //初始化顺序栈
	for(int i = 0; a[i]; i++)//数组中的元素依次进栈
		Push_SqStack(S, a[i]);
	for(int i = 0; a[i]; i++)//顺序栈中栈顶元素依次出栈
	{
		Pop_SqStack(S, e);
		if(a[i] != e)//判断a[i]是否与栈顶元素相同
			return 0;//不相同直接返回0
	}
	return 1;
}


int main()
{
	printf("请输入需要判断的字符串\n");
	elem a[n];		//定义长度为n的
	gets(a);		//键盘输入需要判断的字符串
	if(Symmetry(a))//如果Symmetry(a)的返回值,为1则执行printf("该字符串是回文\n");
	{
		printf("该字符串是回文\n");
	}
	else			//否则执行printf("该字符串不是回文\n");
	{
		printf("该字符串不是回文\n");
	}
	return 0;
}

如有错误,欢迎读者批评指正。
如有疑问,可在下方留言。

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

【数据结构】判定给定的字符序列是否为回文 的相关文章

  • WebStorm NodeJS

    按 Create New Project 選擇 Empty Project 選擇自己的Directory 作為Location Location 最尾是代表Project Name 改為Hello World 創建一個Javascript
  • wsl ubuntu22.04 conda环境安装labelImg解决xcb缺失问题

    labelImg 安装 pip install PyQt5 i https pypi tuna tsinghua edu cn simple pip install pyqt5 tools i https pypi tuna tsinghu
  • 7个大一C语言必学的程序 / C语言经典代码大全

    嗨 大家好 xff0c 这里是可莉 xff01 今天给大家带来的是7个C语言的经典基础代码 那一起往下看下去把 程序一 打印100到200之间的素数 include lt stdio h gt int main int i for i 61
  • 字符串转化为枚举类型

    需求 xff1a 通过配置文件中自定义传入枚举类型的值 span class token annotation punctuation 64 value span span class token punctuation span span
  • NAT和PAT的原理及配置

    文章目录 一 NAT1 NAT概述2 私有地址3 NAT工作原理4 NAT功能5 NAT包含4类地址6 NAT的实现方式 二 静态转换 xff08 Static Translation xff09 三 动态转换 xff08 Dynamic
  • Linux系统安装教程(手把手教学)

    文章目录 1 首先 xff0c 打开虚拟机 xff0c 点击新建虚拟机2 点击下一步 xff0c 再点击稍后安装3 操作系统选择Linux xff0c 版本选择CentOS7 64位4 命名虚拟机5 设置磁盘大小为100GB6 设置内存为4
  • NFS共享存储服务

    文章目录 引言一 NFS概述二 安装 nfs utils rpcbind 软件包三 NFS的特点四 实验步骤1 安装nfs和rpcbind软件2 设置共享目录3 启动 NFS服务并验证结果4 客户机中访问 NFS 共享资源4 1 手动挂载
  • 优化命令之Sar命令

    文章目录 引言一 sar简介1 sar命令常用格式2 常用选项3 常用参数 二 Sar常用性能数据三 CPU资源监控1 整体CPU使用统计 xff08 u xff09 2 各个CPU使用统计 P 3 将CPU使用情况保存到文件中 四 内存监
  • MySQL高级SQL语句

    文章目录 引言一 常用查询1 order by按关键字排序1 1 升序排序1 2 降序排序1 3 结合where进行条件过滤再排序1 4 多字段排序 2 and or判断2 1 and or 且与或的使用2 2 嵌套 多条件使用 3 dis
  • MongoDB搭建及基础操作

    文章目录 引言一 MongoDB概述1 什么是MongoDB2 MongoDB的特点3 MongoDB适用场景4 MongoDB概念解析 二 搭建MongoDB1 关闭系统防火墙和安全机制2 配置mongodb源仓库3 安装mongodb4
  • 【云原生之k8s】k8s之持久化存储PV、PVC

    文章目录 一 PV和PVC1 PV 概念2 PVC概念3 PV 与 PVC 之间的关系3 1 PV和PVC的生命周期3 2 一个PV从创建到销毁的具体流程3 3 三种回收策略3 4 查看pv pvc的定义方式 规格 4 两种PV的提供方式
  • react native 这样理解运行机制

    移动开发中 xff0c native开发性能和效果上无疑是最好的 但是在众多的情况下 xff0c native开发并不是最优的选择 当需求经常改动的时候 xff0c 当预算有限的时候 xff0c 当deadline很近的时候 xff0c n
  • Promethues原理详解

    目录 引言 一 Prometheus 概述 1 什么是Prometheus 2 Zabbix和Prometheus区别 3 Prometheus的特点 二 运维监控平台设计思路 三 Prometheus监控体系 1 系统层监控 xff08
  • Prometheus部署、操作及Grafana展示

    目录 一 部署Prometheus xff08 192 168 109 18 xff09 1 环境准备工作 2 普罗米修斯的部署 2 1 上传 prometheus 2 37 0 linux amd64 tar gz 到 opt 目录中 x
  • 云原生--kubectl命令汇总

    目录 1 kubectl自动补全 2 kubectl上下文和配置 3 创建对象 4 显示和查找资源 5 更新资源 6 修补资源 7 编辑资源 8 scale资源 9 删除资源 10 与运行中的pod交互 11 与节点和集群交互 12 资源类
  • 计蒜客 - T1096 - 石头剪刀布

    计蒜客 T1096 石头剪刀布 题目 石头剪刀布是常见的猜拳游戏 石头胜剪刀 xff0c 剪刀胜布 xff0c 布胜石头 如果两个人出拳一样 xff0c 则不分胜负 一天 xff0c 小 A 和小B正好在玩石头剪刀布 已知他们的出拳都是有周
  • Docker保姆级教程:用Dockerfile文件构建专属于你的镜像

    初学者想要详细的了解docker可以去Docker菜鸟教程仔细学习 xff0c 本文只展示使用docker部署代码的全部过程 操作系统是ubuntu xff1a 18 04 xff08 tip xff1a 一定要了解docker是什么 xf
  • Windows安装tar.gz格式文件的方法

    首先下载tar gz文件 xff0c 比如我准备安装python docx的库文件 xff1a python docx 0 8 6 tar gz xff0c 下载后是一个tar gz文件 xff0c 解压软件解压 xff0c 解压后的目录里
  • SQL单表查询语句及其示例

    主要包括模糊查询 排序 别名查询 条件查询 逻辑运算and or in 分页显示 单表查询 新建表 xff08 商品分类表 xff09 商品ID 商品分类名称 商品描述 1 香烟酒水 二锅头 xff0c 女儿红 2 皮鞋箱包 江南皮革厂打造
  • WIN10安装sedatools,出现蓝屏代码为PAGE_FAULT_IN_NONPAGED_AREA,提示重启原因是因为hardlock.sys。

    安装sedatools的方法是从b站上搜索 xff08 直接搜索silvaco xff0c up主为向上生长的谛听 xff09 在安装的时候刚开始setup不上 xff0c 然后通过开启windows的安全模式 xff0c 得以安装成功 x

随机推荐