回文判断:《ABCCBA》对称。
1,思路:
1,主要思想:
首先定义栈存储结构包括一个字符型数组,和一个表示栈顶元素的指针的变量top然后在此基础上设计回文算法。
2,本程序包括四个模块:
(1),主函数:
int main(){
创建栈并进行初始化。
输入要进行判断的字符串。
定义一个bool型变量‘f’并进行初始化赋值为,ture。
让字符串进栈。
让字符串出栈,并且判断入栈和出栈的值是否相同,如果不一样,把f的值变为false后退出循环。
根据‘f’的值进行判断是否为回文
}
(2),创建初始化栈InitStack()—为栈分配储存空间,并且使栈顶指针的值为-1。
(3),入栈PushStatic()—如果栈满返回false,否则把栈顶指针+1,把e的值赋给栈顶元素返回ture。
(4),出栈PopStatic()—如果栈空返回false否则把栈顶元素赋值给e,栈顶指针-1,返回ture。
3,元素类型,节点类型和指针类型。
typedef struct Node{
cahr data[MAXSIZE];//最大容量
int top//栈顶指针。
}Static;
4,主函数和其他函数清单:
void InteStatic(Stack %&S){}
bool PushStatic(Stack %&s char e){}
bool PopStatic(Stack %&s char &e){}
int main(){}
/ / 到 此 就 结 束 了 \color{blue}{//到此就结束了} //到此就结束了
2,代码如下:
#include<iostream>
using namespace std;
#include<cstdlib>
#define MAXSIZE 1000
typedef struct Node{
char data[MAXSIZE];
int top//
}
$\color{red}{//创建栈并且进行初始化----}$
void InitStack(Stack *&s){
s = (Stack*)malloc(sizeof(Stack));//获取长度并赋值给‘s’。
s->top = -1;
}
$\color{red}{//开始入栈:}$
bool PushStack(Stack *&s char e){
if(s->top==MAXSIZE-1)//判断栈满
return false;
s->top++;
e=s->data[s->top] = e;
reutrn ture;
}
$\color{red}{//出栈操作:}$
bool PopStack(Stack *&s char &e){
if(s->top==-1)//如果栈空。
return false;
e=s->data[s->top];把栈顶元素赋值给e。
s->top--;
return ture;
}
$\color{red}{//开始写主函数:}$
int main()
{
Stack *s;
InitStack(s);//初始化栈。
string a;
cin>>a;
char e;
bool f=true;
for(int i=0;i<a.length();i++)
PushStack(s,a[i]);//让字符串进栈
for(int i=0;i<a.length();i++)
{
PopStack(s,e);//让字符串出栈,判断入栈和出栈的值是否完全一样 。
if(a[i]!=e)
{
f=false;
break;
}
}
if(!f)
cout<<"No";
else
cout<<"Yes";
return 0;
}
3, 运行结果如下:
(1),是回文:
(2),非回文: