顺序栈实现回文串
题目描述
请你使用顺序栈编写symmetry函数实现判断一个字符串是否为回文
编写主函数调用子函数symmetry
同时对其中用到的功能段尽量用子函数来实现
输入描述
输入一串字符串,遇回车结束
输出描述
是回文或者不是回文
样例输入
asdffdsa
样例输出
是回文
判断代码
int huiwen(SElemType *a,int len)
{
SqStack s;
SElemType x;
int i,j;
int k=len/2;
InitStack(s);
for(i=0;i<k;i++)
Push(s,a[i]);
for(j=len-k;j<len;j++)
if(Pop(s,x)&&x!=a[j])
{
break;
}
if(j!=len)
return ERROR;
return OK;
}
完整代码(中规中矩版)
#include<bits/stdc++.h>
using namespace std;
//顺序栈定义
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100//顺序栈存储空间的初始分配量
typedef int Status;
typedef char SElemType;
typedef char QElemType;//重新定义QElemType为int型
typedef struct {
SElemType *base;//栈底指针
SElemType *top;//栈顶指针
int stacksize;//栈可用的最大容量
} SqStack;
Status InitStack(SqStack &S);
Status Push(SqStack &S, SElemType e);
Status Pop(SqStack &S, SElemType &e);
//算法 顺序栈的初始化
Status InitStack(SqStack &S) {
//构造一个空栈S
S.base = new SElemType[MAXSIZE];//为顺序栈动态分配一个最大容量为MAXSIZE的数组空间
if (!S.base)
exit(OVERFLOW); //存储分配失败
S.top = S.base; //top初始为base,空栈
S.stacksize = MAXSIZE; //stacksize置为栈的最大容量MAXSIZE
return OK;
}
//算法 顺序栈的入栈
Status Push(SqStack &S, SElemType e) {
// 插入元素e为新的栈顶元素
if (S.top - S.base == S.stacksize)
return ERROR; //栈满
*(S.top++) = e; //元素e压入栈顶,栈顶指针加1
return OK;
}
//算法 顺序栈的出栈
Status Pop(SqStack &S, SElemType &e)
{
// 插入元素e为新的栈顶元素
if (S.top==S.base)
return ERROR; //栈空
e=*--S.top; //元素e压入栈顶,栈顶指针加1
return OK;
}
//判断回文
int huiwen(SElemType *a,int len)
{
SqStack s;
SElemType x;
int i,j;
int k=len/2;
InitStack(s);
for(i=0;i<k;i++)
Push(s,a[i]);
for(j=len-k;j<len;j++)
if(Pop(s,x)&&x!=a[j])
{
break;
}
if(j!=len)
return ERROR;
return OK;
}
int main() {
**函数调用**
}
完整代码(简单版)
#include<bits/stdc++.h>
using namespace std;
int main(){
string a;
cin>>a;
string b=a;
reverse(a.begin(),a.end());
if(a==b)
cout<<"是回文";
else
cout<<"不是回文";
return 0;
}
完整代码(Java版)
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
Stack<Character> st=new Stack<Character>();
String a=in.next();
int L=a.length();
char[] c=new char[L];
c=a.toCharArray();
for(int i=0;i<L;i++) {
Character C=new Character(c[i]);
st.push(C);
}
char[] b=new char[L];
int A=1;
b=a.toCharArray();
for(int i=0;i<L;i++) {
if(b[i]!=st.pop()) {
A=0;
break;
}
}
if(A==0) {
System.out.println("不是回文");
}else {
System.out.println("是回文");
}
}
}