回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。写一个算法判定给定的字符序列是否为回文。(提示:将一半字符入栈)。
输出结果:
主要算法:
//字符串一半入栈比较
int Compare(char x[])
{
SqStack s;
InitStack(s);
int n = int(strlen(x));
//将前一半字符串入栈
for (int i = 0; i < n / 2; i++)
{
Push(s, x[i]);
}
//判断字符串的奇偶
int j;
if (n % 2 == 0)
{
j = n / 2;
}
else
{
j = (n + 1) / 2;
}
//将前一半元素出栈与后一半比较
int flag = 0;
for (int i = j; i < n; i++)
{
char e=0, temp;
Pop(s,e);
temp = e;
if (temp == e)
flag=1;
else
{
flag=0;
break;
}
return flag;
}
return flag;
}
文章来源地址https://www.toymoban.com/news/detail-734465.html
完整代码:
#include<iostream>
using namespace std;
//定义顺序栈
#define MAXSIZE 20
typedef struct
{
char* base;
char* top;
int stacksize;
}SqStack;
//初始化
int InitStack(SqStack& S)
{
S.base = new char[MAXSIZE];
if (!S.base)
return OVERFLOW;
S.top = S.base;
S.stacksize = MAXSIZE;
return 1;
}
//入栈
int Push(SqStack& S, char e)
{
if (S.top - S.base == S.stacksize)
return 0;
*S.top++ = e;
return 1;
}
//出栈
int Pop(SqStack& S, char e)
{
if (S.top == S.base)
return 0;
e = *--S.top;
return 0;
}
//字符串一半入栈比较
int Compare(char x[])
{
SqStack s;
InitStack(s);
int n = int(strlen(x));
//将前一半字符串入栈
for (int i = 0; i < n / 2; i++)
{
Push(s, x[i]);
}
//判断字符串的奇偶
int j;
if (n % 2 == 0)
{
j = n / 2;
}
else
{
j = (n + 1) / 2;
}
//将前一半元素出栈与后一半比较
int flag = 0;
for (int i = j; i < n; i++)
{
char e=0, temp;
Pop(s,e);
temp = e;
if (temp == e)
flag=1;
else
{
flag=0;
break;
}
return flag;
}
return flag;
}
int main()
{
cout << "请输入长度小于"<<MAXSIZE<<"的字符串:"<<endl;
char stack[MAXSIZE];
cin >> stack;
if (Compare(stack))
{
cout << "此序列是回文数!" << endl;
}
else
{
cout << "此序列不是回文数!" << endl;
}
return 0;
}
文章来源:https://www.toymoban.com/news/detail-734465.html
到了这里,关于判定给定的字符序列是否为回文【数据结构】【栈】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!