请利用堆栈解答问题,请求大神帮我解答编程

请利用堆栈解答问题,请求大神帮我解答编程

问题描述:

输入

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方法判断字符串是否对称

思路:

  1. 先定义一个栈的结构体
  2. 将数据入栈
  3. 循环的将数据出栈,并且比较出栈的字符和循环的字符是否相等
  4. 如果字符不相等,则输出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