首先我们需要确定思路,如何用栈来判断字符串是否为回文。
1.栈是先进后出
2.回文是指正读反读均相同的字符序列
从这两点很容易就可以联想到一个方法,我们先将字符串全部存进去栈中,再将它全部出栈,进行对比,如果完全相同则为回文,这是一个简单并且直接的方法,但是还有没有方法可以优化呢?
我们可以可以通过回文的性质联想到先将一般的字符串存进去,出栈后再与剩下的一般进行比较,完全相同则为回文,这样的算法比起刚才的效率高了一倍。
明确了思路就可以开始写算法了

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define StackSize 100 //假定预分配的栈空间最多为100个元素
typedef char DataType;//假定栈元素的数据类型为字符typedef struct
{DataType data[StackSize];int top;
}SeqStack;void Init(SeqStack *&s)
{s=(SeqStack *)malloc(sizeof(SeqStack));s->top=-1;
}
//初始化栈
void push(SeqStack *s,DataType e)
{if( s->top == StackSize ){printf("栈满\n");}else{s->top++;s->data[s->top]=e;}
}
//入栈
DataType pop(SeqStack *s)
{if( s->top == -1 ){printf("栈空\n");return  '\0';}  return (s->data[s->top--]);
}
//出栈
int main()
{SeqStack *s;int i=0,length,mid,flag=1;char str[StackSize],y,z;printf("请输入需要判断回文的字符串:\n");gets(str);length = strlen(str);mid = length/2-1;
//mid为字符串中间字符的下标Init(s);for( i=0; i<length/2; i++){push(s,str[i]);}
//入栈    if( length%2 != 0 )mid += 1;
//判断字符串长度是奇数还是偶数,当为奇数时从中间下一个开始比较 for( i=1; i<=length/2; i++){if( str[mid+i] == pop(s) ){flag = 1;}else{flag = 0;break;}} if( flag == 1 )printf("该字符串为回文\n"); elseprintf("该字符串不是回文");return 0;
}

因为我们先存进去一半的字符串,但如果字符串长度为奇数,既有一个字符仅仅出现过一次时,我们可以跳过它,与出栈数据与它后边的字符进行比较,当完全相同时,即为回文

判断字符串是否为回文(C语言 顺序栈)相关推荐

  1. C语言试题三十一之判断字符串是否为回文?若是则函数返回1,主函数中输出yes,否则返回0,主函数中输出no。回文是指顺读和倒读都是一样的字符串。

    1. 题目 请编写函数function,该函数的功能是:判断字符串是否为回文?若是则函数返回1,主函数中输出yes,否则返回0,主函数中输出no.回文是指顺读和倒读都是一样的字符串. 2 .温馨提示 ...

  2. C语言判断字符串是否为回文

    C语言判断字符串是否为回文 回文就是字符串中心对称,如"abcba"."abccba"是回文,"abcdba"不是回文. /*判断字符串是否 ...

  3. 【C语言】简单判断字符串是否为回文

    **C语言简单判断字符串是否为回文**哈哈哈哈哈,作为一个刚学c语言不久的小白,今天来分享一下自己今天学到的一个判断字符串是否为回文的解决方法_(:з」∠)_小白用的编译器是Visual Studio ...

  4. JAVA语言:利用递归方法判断字符串是否为回文

    java练习:利用递归方法判断字符串是否为回文(java程序语言设计课后习题4.21) 回文:字符串正向输出和逆向输出结果相同 ,如12321 源代码如下: import java.util.Scan ...

  5. C语言之判断字符串是否为回文

    /*编写一个函数,判断字符串是否为回文.所谓回文指顺读和逆读都一样的字符串. 例如:"level","ABCCBA"*/ 顺读和逆读: 1.即数组第i个元素和第 ...

  6. bigdecimal 判断是否为数字_C语言判断字符串是否为回文

    回文就是字符串中心对称,如"abcba"."abccba"是回文,"abcdba"不是回文. /*判断字符串是否为回文*/ #include ...

  7. 判断相等_C语言判断字符串是否为回文

    回文就是字符串中心对称,如"abcba"."abccba"是回文,"abcdba"不是回文. /*判断字符串是否为回文*/ #include ...

  8. 判断字符串是否是回文(C语言)

    ​ //判断字符串是否是回文 样例输入1:abc 样例输出1:0 //样例输入2:aba 样例输出2:1 //头文件 #include <stdio.h> #include <std ...

  9. 判断字符串是否为回文的三种常用编程语言实现

    引言:回文是一种具有镜像对称性的字符串,即它从左到右读和从右到左读是相同的.回文可以在文学.语言学.数学.计算机科学等领域中得到广泛应用.在计算机科学中,判断一个字符串是否为回文是一项基本的算法挑战. ...

  10. 判断字符串是否为回文字符串_字符串文字

    判断字符串是否为回文字符串 String objects hold ordered sequences of bytes, typically characters, usually to form ...

最新文章

  1. PHP7 RC7 Release对比PHP5.6快速排序20000数据性能体验以及新语法尝鲜
  2. android 获取控件高度_安卓开发入门教程UI控件_ImageView
  3. iptables与tomcat
  4. 在自己的linux服务器上面部署ShowDoc
  5. SpringBoot环境切换
  6. Django(五)中间件
  7. java模拟时间_使用生成器模拟时间分片
  8. php矢量瓦片,矢量瓦片 - SegmentFault 思否
  9. C# DataTable 用法简介
  10. 代码描述10911 - Forming Quiz Teams
  11. 美人计--图片asp木马
  12. 低代码平台在金融行业的OA解决方案
  13. 刚斩获头条美团的offer,Java开发面试题详解(带答案)
  14. 什么是智能DNS云解析?云解析如何实现智能解析效果?
  15. ble协议栈从零开始七(linklayer 之 privacy)
  16. 禁止网页 切屏 切换标签
  17. 本机无法 正常连接到桌面端Ubuntu虚拟机
  18. CSS3 媒体查询(media)与 Viewport
  19. hp linux 禁用u盘启动项,BIOS关闭Secure Boot(安全启动)方法大全(联想,华硕,DELL,HP等品牌)...
  20. linux怎么生成图形,如何在Ubuntu 16.04中创建GIF动态图片

热门文章

  1. vivado 验证ddr引脚_vivado下ddr3的读写和测试详解
  2. Linux 查看显存带宽,Vega 20规格与Vega 10相近,显存带宽翻倍,但目前只能跑Linux - 超能网 - IT帮...
  3. Shell命令-Sort,Join
  4. 设计模式之工厂模式(三)
  5. 试题 G: 外卖店优先级 第十届蓝桥杯
  6. 431.chapter10. working with flat files
  7. LDAP常用命令解析
  8. burp suite 二级域名扫描插件
  9. Android4.0图库Gallery2代码分析(二) 数据管理和数据加载
  10. MyEclipse移动开发教程:移动Web模拟器指南(一)