第八章十一题,修改了 ,用单链表实现str.(不好意思又看错条件了,这次没有错误了。)powerby KTL

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

typedef char datatype;

typedef struct node
{
 datatype data;
 struct node * pNext;
}linklist;

void PUSHL(linklist **S,datatype e)
{
 linklist *p;
 p=(linklist*)malloc(sizeof(linklist));
 p->data=e;
 p->pNext=*S;
 *S=p;
}//入栈
datatype POPL(linklist **S)
{
 datatype X;
 if((*S)==NULL)
 {
  printf("栈溢出/n");
  return -1;
 }
 else
 {
  X=(*S)->data;
  (*S)=(*S)->pNext;
  return(X);
 }
}//出栈

bool MYFUNC(linklist *strl)
{
 linklist*q,*p;
 int n=0,i=0;
 datatype ch;
 p=strl;
 while(p)
 {
  p=p->pNext;
  n++;
 }
 p=strl;
 q=(linklist*)malloc(sizeof(linklist));
 while(i<(n/2))//i是为了记数,让一半的字符入栈;
 {
  PUSHL(&q,p->data);
  p=p->pNext;
  i++;
 }
 i++;//使i指向未入栈的字符;
 while(i<n)
 {
  if(i==(n+1)/2)//判断是否偶数个字符;
   p=p->pNext;
  ch=p->data;
  if(ch!=POPL(&q))//调用的时候用了**;
   return false;
  p=p->pNext;
  i++;
 }
 return true;
}//关键函数判断是否对称

int main()
{
 datatype str[100];
 int i=0;
 linklist * strl,*p,*h;
 strl=(linklist *)malloc(sizeof(linklist));
 h=strl;
 printf("请输入字符串:");
 scanf("%s",str);
 strl->data=str[i];
 i++;
 strl->pNext=NULL;
 while(str[i]!='/0')
 {
  p=(linklist *)malloc(sizeof(linklist));
  p->data=str[i];
  i++;
  strl->pNext=p;
  strl=p;
  strl->pNext=NULL;
 }
 strl=h;
 if(MYFUNC(strl)){
  printf("是对称字符串。。。/n");
  return 1;
 }
 else{
  printf("不是对称字符串。。。/n");
  return 0;
 }
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值