c语言判断字符串是否对称,c语言 判断字符串是否中心对称
匿名用户
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语言 判断字符串是否中心对称相关推荐
- 探讨“对称数”的判断算法
c语言实现算法 所谓对称数就是指5,88,404,3223等从左往右或从右往左读都相同的数,而89,123,2323这样的数就不是对称数了.现在要求编程判断以字符串的形式给出的对称数,但不能用字符判断 ...
- c语言if中文字符串比较好,如何在C语言中使用汉字作为if的判断语句?
题目: 如何在C语言中使用汉字作为if的判断语句? 解答: 直观点可以用strcmp函数,如果想用直接用==或!=来判断,你要先把汉字换成一个unsigned short型,要比较的汉字也放入一个un ...
- R语言 判断矩阵是否对称半正定
对称半正定矩阵可进行choleskey分解,使用chol()函数结合tryCatch错误异常判断,即可判断矩阵是否对称半正定. 1. 仅输出是否半正定 Sigma为一个对称矩阵,但非半正定,进行cho ...
- 判断字符串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 ...
- c语言判断字符是否对称,2020-07-23(C语言)数据结构-试设计算法判断该链表的全部n个字符是否中心对称。...
//设单链表的表头指针为L,结点结构由data和next两个域构成,其中data域为字符型.试设计算法判断该链表的全部n个字符是否中心对称.例如xyx,xyyx都是中心对称. include incl ...
- c语言字符串文库总结,C语言字符串.ppt
C语言字符串.ppt ACM程序设计,福州大学至诚学院 冯新,第四讲,字符串处理,常用函数介绍,复制,char* strcpy char *s1, const char *s2; 将字符串s2复制到s ...
- Python语言学习之字符串那些事:python和字符串的使用方法之详细攻略
Python语言学习之字符串那些事:python和字符串的使用方法之详细攻略 目录 python与字符串的那些事 1.字符串中只保留汉字 2.字符串的截取 3.在字符串中加入变量 4.字符串与列表转换 ...
- C语言字符型数组ppt,C语言第13讲指针与字符串(字符数组).ppt
C语言第13讲指针与字符串(字符数组).ppt 6.2.3 指针与字符串(字符数组) C语言用字符数组存放字符串. 字符数组元素个数确定,一般用下标控制循环. 字符串有效字符个数由0确定,用结束符0控 ...
- c语言字符串加减_C语言中指针的介绍
C语言中指针的介绍 指针是C语言中广泛使用的一种数据类型. 运用指针编程是C语言最主要的风格之一.利用指针变量可以表示各种数据结构:能很方便地使用数组和字符串: 并能象汇编语言一样处理内存地址,从而编 ...
- 将字符串添加负数_Go语言实现LeetCode算法:8 字符串转整数
Go语言中文网,致力于每日分享编码.开源等知识,欢迎关注我,会有意想不到的收获! 看到题目,是不是超级简单,用 strconv.Atoi 就可以了?题目当然不是这么简单的要求. 1 题目描述 实现at ...
最新文章
- Maven settings.xml配置详解
- API聚合网关技术选型参考-网友实战-使用协程
- 【论文解读】CVPR 2021 妆容迁移 论文+ 代码 汇总,美得很美得很!
- Python 代码混淆和加密技术
- iphone 流媒体
- Android 关于后台杀死App之后改变服务器状态的一些尝试
- java synchronized 类锁_【java】synchronized对象锁和类锁简介【图文教程】
- Varnish 缓存
- SAP QM 可以控制到没有收到Vendor 的certificate的话就不能做UD.
- Hadoop Partitioner 实战详解
- (android开发http拦截)fiddler2抓包工具
- wifi分析仪怎么看哪个信道好_四大实用WiFi检测工具,调整信道避免干扰
- cs与msf联动概述
- android 闪屏图片,Android的闪屏图像尺寸,以适应所有设备Android的闪屏图像尺寸,以适应所有设备(Andro...
- MATLAB求解微分方程
- 华中科技大学和华为云瑶光造就中国团队全球首冠
- php框架tp6自学笔记——pdf文件下载
- POJ 2752 既是前缀又是后缀
- 职场干货——职场多年,一些对付小人的经验之谈
- tenda w311mi驱动安装-ubuntu