请利用堆栈解答问题,请求大神帮我解答编程
问题描述:
输入
palindrome
输出
FALSE
输入
madam
输出
TRUE(对称的)
输入
noon
输出
TRUE(对称的)
输入
string
输出
FALSE
答
每个步骤的解释如下:
typedef struct:定义结构体方法
void InitStack:初始化栈方法
void DestroyStack:销毁栈方法
bool StackEmpty:判断栈是否为空方法
bool Push:入栈方法
bool Pop:出栈方法
bool symmetry:利用栈判断字符是否对称方法
int main():主方法,输入字符串并调用symmetry方法判断字符串是否对称
答
思路:
- 先定义一个栈的结构体
- 将数据入栈
- 循环的将数据出栈,并且比较出栈的字符和循环的字符是否相等
- 如果字符不相等,则输出false。如果字符相等,则输出true
如果代码方面还有不懂可以继续问我,如果对你有帮助,请采纳
具体代码如下,有部分注释:
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 100
typedef struct
{
char data[MaxSize];
int top;
}SqStack;
void InitStack(SqStack *&s)//begin Stack
{
s=(SqStack *)malloc(sizeof(SqStack));
s->top=-1;
}
void DestroyStack(SqStack * &s)//free Stack
{
free(s);
}
bool StackEmpty(SqStack *s)//Empty???
{
return(s->top==-1);
}
bool Push(SqStack *&s,char e) //push one by one
{
if(s->top==MaxSize-1)
{
return false;
}
s->top++;
s->data[s->top]=e;
return true;
}
bool Pop (SqStack *&s,char &e)//pop one by one
{
if(s->top==1)
{
return false;
}
e=s->data[s->top];
s->top--;
return true;
}
//先入栈,再出栈,判断字符是否相等
bool symmetry(char str[])
{
int i;
char e;
SqStack *st;
//初始化栈
InitStack(st);
for(i=0;str[i]!='\0';i++)
{
//入栈
Push(st,str[i]);
}
for(i=0;str[i]!='\0';i++)
{
//出栈
Pop(st,e);
if(str[i]!=e)
{
DestroyStack(st);
printf("FALSE");
}
}
DestroyStack(st);
printf("TRUE(对称的)");
}
int main()
{
//输入字符
char str[MaxSize];
for(int i=0;i<MaxSize;i++)
{
scanf("%c",str[i]);
if(str[i]=='\0')
{
break;
}
}
symmetry(str);
}
答
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
答
#include<stdio.h> //标准输出
#include<string.h> //字符串处理
#include<stdlib.h> //标准库
#define StackSize 100 //假定预分配的栈空间最多为100个元素
//定义栈的结构体
typedef struct
{
char data[StackSize];// 存储元素的数组
int top; //栈顶指针
}SeqStack;
//初始化栈
void Init(SeqStack *&s)
{
s=(SeqStack *)malloc(sizeof(SeqStack)); //分配内存
s->top=-1; //初始化栈顶指针
}
//入栈
void push(SeqStack *s,char e)
{
if( s->top == StackSize )
{
printf("栈满\n");
}
else
{
//移动栈顶指针
s->top++;
//将数据加入栈中
s->data[s->top]=e;
}
}
//出栈
char pop(SeqStack *s)
{
if( s->top == -1 )
{
//栈为空
printf("栈空\n");
return '\0';
}
//获取数据,并将数据移出栈
return (s->data[s->top--]);
}
//判断字符串是否对称
int symmetry(char str[])
{
//定义变量
SeqStack *stack;
//定义变量,flag标志着字符串是否对称,1:对称,0:不对称
int i=0,length,flag=1;
//获取字符串长度
length = strlen(str);
//初始化栈
Init(stack);
//遍历字符串,将字符入栈
for( i=0; i<length; i++)
{
//入栈
push(stack,str[i]);
}
//遍历字符串并判断字符与出栈的字符是否相等
for( i=0; i<length; i++)
{
if( str[i] != pop(stack) )
{
//如果字符与出栈的字符不相等,则整个字符串不是对称的
flag = 0;
break;
}
}
//返回标志
return flag;
}
int main()
{
//定义变量
int flag;
char str[StackSize];
printf("请输入须要判断是否对称的字符串:\n");
//获取用户输入的字符串
gets(str);
//判断字符串是否对称
flag = symmetry(str);
if( flag == 1 )
{
//字符串对称
printf("TRUE(对称的)\n");
}
else
{
//字符串不对称
printf("FALSE \n");
}
return 0;
}
答
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y