顺序栈之判断一个字符串是否是对称串

该博客介绍了一个C++算法,通过顺序栈来判断输入的字符串是否为对称串,即从左到右和从右到左读取是否相同。代码详细展示了如何初始化、操作栈以及进行对称性检查。通过对字符串的字符逐个入栈然后比较栈顶元素与对应位置的字符,实现了对称性的验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题设计:

设计一个算法利用顺序栈判断一个字符串是否是对称串。所谓对称串是指从左向右读和从右向左读的序列相同。

代码实现:

#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
#define MaxSize 60
typedef int ElemType;
typedef struct {
   ElemType data[MaxSize];
   int top;  //栈顶指针
}SqStack;  //定义顺序栈类型
//初始化栈
void InitStack(SqStack *&s){
	s=(SqStack *)malloc(sizeof(SqStack));
	s->top=-1;
}
//销毁栈
void DestroyStack(SqStack *&s){
   free(s);
}
//判空
bool StackEmpty(SqStack *s){
	return(s->top==-1);
}
//进栈
bool Push(SqStack *&s,ElemType e){
	if(s->top==MaxSize-1)  //进栈判满
	   return false;
	s->top++; //指针加一
	s->data[s->top]=e;
	return true;
}
//出栈
bool Pop(SqStack *&s,ElemType &e){
	if(s->top==-1)  //出栈判空
		return false;
	e=s->data[s->top]; //取栈顶元素
	s->top--; //指针减一
	return true;
}
//判断一个字符串是否是对称串
bool symmetry(string str){
   ElemType e;
   SqStack *st;
   InitStack(st);   //初始化栈
   //元素进栈
   for(int i=0;i<str.length();i++){
      Push(st,str[i]);
   }
   //比较栈中元素和字符串
   for(int i=0;i<str.length();i++){
       Pop(st,e); //出栈,e存放的是当前栈顶元素
	   if(e!=str[i]){  //不同
		  DestroyStack(st);  //销毁栈
		  return false;
	   }
   }
   DestroyStack(st);
   return true;
}
int main(){
   string str;
   cin>>str;
   bool flag;
   //判断它是不是对称串
   flag=symmetry(str);
   if(flag)
	   cout<<str<<"是回文串"<<endl;
   else
	   cout<<str<<"不是回文串"<<endl;
}

运行结果:

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.史

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值