10.28
用栈解决回文字符串问题
include
define MAXSIZE 100
char data[MAXSIZE];
using namespace std;
typedef struct
{
charbase;
chartop;
int stacksize;
}SqStack;
bool initStack(SqStack&S)
{
S.base=new char[MAXSIZE];
if(!S.base)return false;
S.top=S.base;
S.stacksize=MAXSIZE;
return true;
}
bool Push(SqStack&S,char c)
{
if(S.top-S.base>=S.stacksize)return false;
S.top++=c;
return true;
}
bool Pop(SqStack&S,char&e)
{
if(S.top==S.base)return false;
e=--S.top;
return true;
}
char getTop(SqStack S)
{
if(S.top!=S.base)return *(S.top-1);
}
int main()
{
int n;
cin>>n;
cin.ignore();
string s;
getline(cin,s);
for(auto c:s)
{
if(c' ')
{
cout<<"入栈不成功"<<endl;
return 0;
}
}
SqStack S;
initStack(S);
char e;
int len=s.length();
int mid=len/2;
int start=len%20?mid:mid+1;//奇数位让start跳过一位进行对比,不同则flag变为false
for(int i=0;i<mid;i++)
{
Push(S,s[i]);
}
bool flag=true;
for(int i=start;i<len;i++)
{
if(getTop(S)&&getTop(S)==s[i])//top不为空且top的数与第i位相同
{
Pop(S,e);
}
else{
flag=false;
break;
}
}
if(flag)cout<<"此字符串是回文串"<<endl;
else cout<<"此字符串不是回文串"<<endl;
}
用队列解决回文问题(链队列)
include
include
using namespace std;
typedef struct QNode
{
char data;
struct QNodenext;
}QNode,QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}QLinklist;
void initQueue(QLinklist&Q)
{
Q.front=Q.rear=new QNode;
Q.front->next=NULL;
}
bool Push(QLinklist&Q,char c)
{
QNodep=new QNode;
p->data=c;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return true;
}
bool Pop(QLinklist&Q,char&e)
{
if(Q.front==Q.rear)return false;
QNodep=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rearp)Q.rear=Q.front;
delete p;
return true;
}
char getTop(QLinklist Q)
{
if(Q.front!=Q.rear)return Q.front->next->data;
return '\0';
}
int main()
{
string s;
getline(cin,s);
string str="";
for(auto c:s)
{
if(c!=' ')
str+=c;
}
int len=str.length();
if(len0)
{
cout<<"该字符串该字符串不是回文字符串"<<endl;
return 0;
}
QLinklist Q;
initQueue(Q);
int mid=len/2;
int start=len%2==0?mid:mid+1;
bool flag=true;
for(int i=len-1;i>=start;i--)//倒序进入队列
{
Push(Q,str[i]);
}
char e;
for(int i=0;i<mid;i++)
{
if(!getTop(Q)||getTop(Q)!=str[i])//队头不为空或者对头与新数组(原数组去掉空格)的第i位不相等是标记为false
{
flag=false;
break;
}
Pop(Q,e);
}
if(flag)cout<<"该字符串是回文字符串"<<endl;
else cout<<"该字符串不是回文字符串"<<endl;
}
浙公网安备 33010602011771号