#include <stdio.h>
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define OK 1
#define ERROR -1
typedef char ElemType;
typedef int Status;
typedef struct stack//创建链栈
{
ElemType data;//数据域
struct stack* next;//指针域 存储下一节点地址
}StackNode,*LinkStack;
Status InitStack(LinkStack &S);//初始化栈
Status Push(LinkStack &S,ElemType e);//将元素e压入栈S
Status Pop(LinkStack &S,ElemType &e);//将元素e压出栈s
int main()
{
LinkStack S = new stack;
InitStack(S);
int length;
ElemType e;
printf("请输入你要存储的字符数:");
scanf("%d",&length);
printf("请输入你要存储的字符:");
for(int i = 0;i<length;i++)
{
printf("\n");
e = getch();//隐式输入
printf("%c",e);
Push(S,e);
}
ElemType elem[100];
if((length%2)==0)//若长度为偶数则出栈一半长度个元素
{
for(int i = 0 ;i<length/2;i++)
{
Pop(S,elem[i]);
}
}
else
{
for(int i = 0;i<=length/2;i++)//若长度为奇数,则出栈一半长度加1个元素,把中间元素一起出栈
{
Pop(S,elem[i]);
}
}
ElemType elemTemp[100];
bool flag = true;
//将剩下的所有元素并一一比较,若有不匹配则直接返回flag为false并退出循环
for(int i = length/2-1;i>=0;i--)
{
Pop(S,elemTemp[i]);
if(elemTemp[i]!=elem[i])
{
flag=false;
break;
}
}
if(flag)
{
printf("该字符串是中心对称关系");
}else{
printf("该字符串不是中心对称关系");
}
return 0;
}
Status InitStack(LinkStack &S)//初始化栈
{
S = NULL;//构造一个空栈 栈顶指针置空
return OK;
}
Status Push(LinkStack &S,ElemType e)//将元素e压入栈S
{
LinkStack p = new stack;//生成新结点,申请空间
p->data = e;//将e值存入结点p
p->next = S;//将新节点放入栈顶
S = p;//将p改成栈顶元素
return OK;
}
Status Pop(LinkStack &S,ElemType &e)//将元素e压出栈s
{
if(S == NULL) return ERROR;//判断栈是否为空,若空则返回ERROR
LinkStack p = S;//创建p结点以释放多余空间
e = S->data;//将栈顶元素赋值给e
S = S->next;//将S栈顶指针移动到S下一位处为栈顶
delete p;//将p空间释放
return OK;
}
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define OK 1
#define ERROR -1
typedef char ElemType;
typedef int Status;
typedef struct stack//创建链栈
{
ElemType data;//数据域
struct stack* next;//指针域 存储下一节点地址
}StackNode,*LinkStack;
Status InitStack(LinkStack &S);//初始化栈
Status Push(LinkStack &S,ElemType e);//将元素e压入栈S
Status Pop(LinkStack &S,ElemType &e);//将元素e压出栈s
int main()
{
LinkStack S = new stack;
InitStack(S);
int length;
ElemType e;
printf("请输入你要存储的字符数:");
scanf("%d",&length);
printf("请输入你要存储的字符:");
for(int i = 0;i<length;i++)
{
printf("\n");
e = getch();//隐式输入
printf("%c",e);
Push(S,e);
}
ElemType elem[100];
if((length%2)==0)//若长度为偶数则出栈一半长度个元素
{
for(int i = 0 ;i<length/2;i++)
{
Pop(S,elem[i]);
}
}
else
{
for(int i = 0;i<=length/2;i++)//若长度为奇数,则出栈一半长度加1个元素,把中间元素一起出栈
{
Pop(S,elem[i]);
}
}
ElemType elemTemp[100];
bool flag = true;
//将剩下的所有元素并一一比较,若有不匹配则直接返回flag为false并退出循环
for(int i = length/2-1;i>=0;i--)
{
Pop(S,elemTemp[i]);
if(elemTemp[i]!=elem[i])
{
flag=false;
break;
}
}
if(flag)
{
printf("该字符串是中心对称关系");
}else{
printf("该字符串不是中心对称关系");
}
return 0;
}
Status InitStack(LinkStack &S)//初始化栈
{
S = NULL;//构造一个空栈 栈顶指针置空
return OK;
}
Status Push(LinkStack &S,ElemType e)//将元素e压入栈S
{
LinkStack p = new stack;//生成新结点,申请空间
p->data = e;//将e值存入结点p
p->next = S;//将新节点放入栈顶
S = p;//将p改成栈顶元素
return OK;
}
Status Pop(LinkStack &S,ElemType &e)//将元素e压出栈s
{
if(S == NULL) return ERROR;//判断栈是否为空,若空则返回ERROR
LinkStack p = S;//创建p结点以释放多余空间
e = S->data;//将栈顶元素赋值给e
S = S->next;//将S栈顶指针移动到S下一位处为栈顶
delete p;//将p空间释放
return OK;
}