回文字符串 递归 c语言,递归法判断回文字符串,急用

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

/*--------用线性表存储字符串,结合堆栈判断回文(关键判断个数为奇或偶,奇跳过中间数据)---------*/

#include 

#include 

#define ok 1;

#define error 0;

typedef char elemtype;

typedef struct lnode{

lnode *next;

elemtype data;

} lnode,*linklist;

bool createlist(linklist &h,int n){

//尾差插法

linklist p,q;

h=new lnode;

h->next=NULL;

q=h;

cout<

if(n<0) return error;

for(int i=0;i

p=new lnode;

cin>>p->data;

p->next=q->next;

q->next=p;

q=q->next;

}

return ok;

}

bool printlist(linklist h){

linklist p;

p=h->next;

while(p!=NULL){

cout<data<

p=p->next;

}

return ok;

}

#define initsize 100

#define stackincrs 10

typedef struct{

elemtype *base;

elemtype *top;

int stacksize;

} stack;

bool initstack(stack &s){

s.base=new elemtype [initsize];

s.top=s.base;

s.stacksize=initsize;

return ok;

}

bool push(stack &s,elemtype e){

if(s.top-s.base>=s.stacksize){

s.base=(elemtype*)realloc(s.base,(s.stacksize+stackincrs)*sizeof(elemtype));

s.top=s.base+s.stacksize;

s.stacksize=s.stacksize+stackincrs;

}

*s.top++=e;

return ok;

}

bool pop(stack &s,elemtype &e){

if(s.top==s.base) return error;

--s.top;

e=*s.top;

return ok;

}

/************************回文判别***********/

bool jude(stack &s,linklist h,int n){

//结果:flag=1为回文,flag=0不为回文

linklist p=h->next;

for(int i=1;i<=n/2;i++){

push(s,p->data);

p=p->next;

}

if(n%2) p=p->next;

bool flag=1;

elemtype c;

while(p!=NULL&&flag){

pop(s,c);

if(c==p->data)

p=p->next;

else flag=0;

}

return flag;

}

void main(){

int n;

stack s;

linklist h;

initstack(s);

cout<

cin>>n;

createlist(h,n);

if (jude(s,h,n))

cout<

else

cout<

cout<

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值