利用顺序栈判断字符串的对称性

Symmetry函数思路:
1.传入参数:字符串(实则为字符串的首地址,这是数组做参数的特性)
2. 字符串str的字符从头到尾全部先入栈,以str[i]=‘\0’判定入栈结束
3. 栈内字符出栈,for循环每出栈一个就与str比较,若有字符不相同,直接return0;否则直到str[i]=’\0’,跳出循环return1

关于字符串长度的奇偶性:
我采用的是将字符串正向与反向对比的方法,如果正反完全相同,那当然具有对称性。所以不存在奇偶性的问题。

代码:

#include
using namespace std;
const int maxsize=100;
//顺序栈的类型定义
typedef char datatype;
typedef struct{
     
	datatype data[maxsize];
	int Top;
}SeqStack;

//函数原型的声明
void InitStack(SeqStack*& S);		//栈的初始化函数
int Empty(SeqStack* S);				//判断空栈函数
int Symmetry(datatype str[]);		//判断对称性函数
int Push(SeqStack* S,datatype e);	//入栈函数
int Pop(SeqStack* S,datatype& e);	//出栈函数
//主函数
int main(){
     
	cout<<"Please enter a set of strings:"<<endl;
	datatype str[100],str1[100];
	cin>>str;
	cout<<Symmetry(str)<<endl;
	cout<<"Please enter a set of strings:"<<endl;
	cin>>str1;
	cout<<Symmetry(str1)<<endl;
	return 0;
}
//函数的定义
void InitStack(SeqStack*& S)
{
     
	S=(SeqStack*)malloc(sizeof(SeqStack));
	S->Top=0;
}
int Push(SeqStack* S,datatype e){
     
	if(S->Top>=maxsize-1){
     
		cout<<"栈上溢!"<<endl;
		return 0;
		}
	else{
     
		S->data[++S->Top]=e;
		return 1;
	}
}
int Pop(SeqStack* S,datatype& e){
     
	if(Empty(S)){
     
		cout<<"栈下溢!"<<endl;
		return 0;
	}
	else{
     
		e=S->data[S->Top--];
		return 1;
	}
}
int Empty(SeqStack* S)
{
     
	if(S->Top<=0)return 1;
	else
	return 0;
}
int Symmetry(datatype str[])	//若对称,返回1,否则返回0
{
     

	datatype e;
	SeqStack* S;
	InitStack(S);
	for(int i=0;str[i]!='\0';i++)//将所有字符入栈
		Push(S,str[i]);
 	for(int i=0;str[i]!='\0';i++)
	{
     
		Pop(S,e);				//所有字符出栈并与原字符串比较
		if(str[i]!=e)
			return 0;
	}
	return 1;
}

结果:
利用顺序栈判断字符串的对称性_第1张图片

你可能感兴趣的:(c/c++,数据结构,c++,栈)