匿名用户

1级

2012-10-19 回答

代码的主要思想

1 讲输入的字符串保存到顺序链表中

2 计算链表的长度

3 根据长度的积偶性,将链表的前一半加到栈中

4 从栈中pop出各个元素,跟链表后一半的各个字符比较,如果有不一样的,说明不对称

具体细节

//判字符串中心对称

#include

#include

#include

//定义单链表结构类型

typedef char datatype;

typedef struct node

{ datatype data;

struct node *next;

}linklist;

//定义顺序栈结构类型,

const int maxsize=40;

typedef struct

{ datatype elements[maxsize];//栈空间的大小

int top;//栈顶下标(elements的下标)

}stack;

void setnull(stack *&);//清空栈

int length(linklist*);//计算链表长度

void printlink(linklist*);//打印链表的数据

void create(linklist *&,datatype*);//创建链表

void push(stack*,datatype);//压栈操作

datatype pop(stack*);//出栈操作

int symmetry(linklist*,stack*);//判字符串是否中心对称的函数声明

void main()

{

linklist *head;stack *s;//定义链表头和栈

datatype str[80];//用于保存输入的字符串

gets(str);//获取字符串

create(head,str);//创建链表,同时链表各个节点的内容就是字符串中的字符

printlink(head);//将链表的内容打印出来

setnull(s);

//栈初始化

//调用symmetry判断是否对称

if(symmetry(head,s)) printf("字符串\"%s\"中心对称\n",str);

else printf("字符串\"%s\"不是中心对称\n",str);

}

//栈初始化

void setnull(stack *&s)

{

s=(stack*)malloc(sizeof(stack));//申请内存

s->top=-1;//初始化栈顶元素下标为-1

}

//求单链表长度,遍历链表,计算长度

int length(linklist*head)

{ linklist *p=head->next;

int n=0;

while(p!=NULL){ n++; p=p->next; }

return n;

}

//输出单链表,遍历链表,打印各个节点的数据

void printlink(linklist*head)

{ linklist *p=head->next;

while(p!=NULL)

{ printf("%c",p->data);

p=p->next;

}

printf("\n");

}

//建立具有头结点的单链表,尾部插入新节点,不多说了

void create(linklist *&head,datatype*str)

{ datatype *p=str;

linklist *s,*r;

head=(linklist*)malloc(sizeof(linklist));

r=head;

while(*p!='\0')

{

s=(linklist*)malloc(sizeof(linklist));

s->data=*p;

r->next=s;

r=s;

p++;

}

r->next=NULL;

}

//顺序栈入栈

void push(stack*s,datatype e)

{

s->top++;//压入新元素,所以栈顶元素下标自加

s->elements[s->top]=e;//栈顶元素赋值

}

//顺序栈出栈

datatype pop(stack*s)

{

datatype temp;

s->top--;//弹出栈顶元素,原来栈顶元素的前一个元素变成新的栈顶元素

temp=s->elements[s->top+1];//获得栈顶元素的值

return temp;

}

//添加判字符串是否中心对称算法

int symmetry(linklist*head,stack*s)

{

int i,a;

datatype e;

linklist *p=head->next;

a=length(head)/2;//计算链表长度

if (length(head)%2==0)//长度为偶数情况

{

for (i=1;i<=a;i++)

{

e=p->data;

push(s,e);//前一半的元素压栈

p=p->next;

}

}

else //积数的情况

{

for (i=1;i<=a;i++)

{

e=p->data;

push(s,e);前一半的元素压栈

p=p->next;

}

if (i==a+1){e=p->data;push(s,e);}//积数情况的特殊处理

}

while (p)//由于p一直向后next,此时的p已经指到链表的后一半的第一个元素了

{

if(p->data!=pop(s))//链表后一半各个元素与栈内元素进行比较

return 0;//如果有不一样的,说明不对称

else p=p->next;

}

return 1;//都一样,所以字符串对称

}

c语言判断字符串是否对称,c语言 判断字符串是否中心对称相关推荐

  1. 探讨“对称数”的判断算法

    c语言实现算法 所谓对称数就是指5,88,404,3223等从左往右或从右往左读都相同的数,而89,123,2323这样的数就不是对称数了.现在要求编程判断以字符串的形式给出的对称数,但不能用字符判断 ...

  2. c语言if中文字符串比较好,如何在C语言中使用汉字作为if的判断语句?

    题目: 如何在C语言中使用汉字作为if的判断语句? 解答: 直观点可以用strcmp函数,如果想用直接用==或!=来判断,你要先把汉字换成一个unsigned short型,要比较的汉字也放入一个un ...

  3. R语言 判断矩阵是否对称半正定

    对称半正定矩阵可进行choleskey分解,使用chol()函数结合tryCatch错误异常判断,即可判断矩阵是否对称半正定. 1. 仅输出是否半正定 Sigma为一个对称矩阵,但非半正定,进行cho ...

  4. 判断字符串s1中是否包含s2字符串c语言,C语言:找出s1中是否存在字符串s2(C language: find out if string s2 exists in s1)...

    C语言:找出s1中是否存在字符串s2(C language: find out if string s2 exists in s1) 是否有任何C函数来检查s1中是否存在字符串s2? s1: &quo ...

  5. c语言判断字符是否对称,2020-07-23(C语言)数据结构-试设计算法判断该链表的全部n个字符是否中心对称。...

    //设单链表的表头指针为L,结点结构由data和next两个域构成,其中data域为字符型.试设计算法判断该链表的全部n个字符是否中心对称.例如xyx,xyyx都是中心对称. include incl ...

  6. c语言字符串文库总结,C语言字符串.ppt

    C语言字符串.ppt ACM程序设计,福州大学至诚学院 冯新,第四讲,字符串处理,常用函数介绍,复制,char* strcpy char *s1, const char *s2; 将字符串s2复制到s ...

  7. Python语言学习之字符串那些事:python和字符串的使用方法之详细攻略

    Python语言学习之字符串那些事:python和字符串的使用方法之详细攻略 目录 python与字符串的那些事 1.字符串中只保留汉字 2.字符串的截取 3.在字符串中加入变量 4.字符串与列表转换 ...

  8. C语言字符型数组ppt,C语言第13讲指针与字符串(字符数组).ppt

    C语言第13讲指针与字符串(字符数组).ppt 6.2.3 指针与字符串(字符数组) C语言用字符数组存放字符串. 字符数组元素个数确定,一般用下标控制循环. 字符串有效字符个数由0确定,用结束符0控 ...

  9. c语言字符串加减_C语言中指针的介绍

    C语言中指针的介绍 指针是C语言中广泛使用的一种数据类型. 运用指针编程是C语言最主要的风格之一.利用指针变量可以表示各种数据结构:能很方便地使用数组和字符串: 并能象汇编语言一样处理内存地址,从而编 ...

  10. 将字符串添加负数_Go语言实现LeetCode算法:8 字符串转整数

    Go语言中文网,致力于每日分享编码.开源等知识,欢迎关注我,会有意想不到的收获! 看到题目,是不是超级简单,用 strconv.Atoi 就可以了?题目当然不是这么简单的要求. 1 题目描述 实现at ...

最新文章

  1. Maven settings.xml配置详解
  2. API聚合网关技术选型参考-网友实战-使用协程
  3. 【论文解读】CVPR 2021 妆容迁移 论文+ 代码 汇总,美得很美得很!
  4. Python 代码混淆和加密技术
  5. iphone 流媒体
  6. Android 关于后台杀死App之后改变服务器状态的一些尝试
  7. java synchronized 类锁_【java】synchronized对象锁和类锁简介【图文教程】
  8. Varnish 缓存
  9. SAP QM 可以控制到没有收到Vendor 的certificate的话就不能做UD.
  10. Hadoop Partitioner 实战详解
  11. (android开发http拦截)fiddler2抓包工具
  12. wifi分析仪怎么看哪个信道好_四大实用WiFi检测工具,调整信道避免干扰
  13. cs与msf联动概述
  14. android 闪屏图片,Android的闪屏图像尺寸,以适应所有设备Android的闪屏图像尺寸,以适应所有设备(Andro...
  15. MATLAB求解微分方程
  16. 华中科技大学和华为云瑶光造就中国团队全球首冠
  17. php框架tp6自学笔记——pdf文件下载
  18. POJ 2752 既是前缀又是后缀
  19. 职场干货——职场多年,一些对付小人的经验之谈
  20. tenda w311mi驱动安装-ubuntu

热门文章

  1. 精益管理研究院陈逸超 | 用精益思维创造数据价值金矿
  2. 运算放大器参数的详细解释和分析-运放压摆率(SR)
  3. 通过气象站API获取天气信息
  4. 计算机工作面试需要准备什么,视频面试手机还是电脑 面试前的准备工作要做好...
  5. 饥荒如何解锁机器人_饥荒人物怎么解锁
  6. 在线图片转文字怎么转?这两种方法简单又实用!
  7. veeam安装及使用
  8. 单例模式及常用使用场景简析
  9. 5面阿里,终获offer(Java后端)
  10. Labwindows扫盲+技巧贴,CVI学习必看