#ifndef stack__h
#define stack__h#include <stdio.h>
#include <stdlib.h>typedef char T; // 数据元素的数据类型struct Stack{T* data;   // 数据元素存储空间的开始地址int top;   // 栈表的当前位置int max;   // 栈表的最大长度
};Stack* Stack_Create(int maxlen);
// 创建栈void Stack_Free(Stack* stk);
// 释放栈void Stack_MakeEmpty(Stack* stk);
// 置为空栈bool Stack_IsEmpty(Stack* stk);
// 判断栈是否空bool Stack_IsFull(Stack* stk);
// 判断栈是否满T Stack_Top(Stack* stk);
// 获取当前栈顶元素 T Stack_Push(Stack* stk, T e);
// 将元素e压入栈顶
// 返回栈顶点元素T Stack_Pop(Stack* stk);
// 将栈顶元素出栈
// 返回栈顶元素void Stack_Print(Stack* stk);
// 打印栈顶到栈低的元素void Palindrome(T* str, int len);
//  利用stack栈判断字符串是否为回文串
//  输入参数:字符串序列,字符串长度
//  若是回文串输出YES,否则输出NO,末尾换行#endif /* stack__h */

#include <iostream>
#include <cstring>
#include "stack_.h"int main(int argc, const char * argv[]) {// insert code here...// std::cout << "Hello, World!\n";int len;T* str;scanf("%d", &len);str = (T*)malloc(sizeof(T)*len);scanf("%s", str);Palindrome(str, len);return 0;
}

#include "stack_.h"Stack* Stack_Create(int maxlen)
// 创建栈
{Stack* stk = (Stack*)malloc(sizeof(Stack));stk->data = (T*)malloc(sizeof(T)*maxlen);stk->max = maxlen;stk->top = -1;return stk;
}void Stack_Free(Stack* stk)
// 释放栈
{free(stk->data);free(stk);
}void Stack_MakeEmpty(Stack* stk)
// 置为空栈
{stk->top = -1;
}bool Stack_IsEmpty(Stack* stk)
// 判断栈是否空
{return -1 == stk->top;
}bool Stack_IsFull(Stack* stk)
// 判断栈是否满
{return stk->top == stk->max-1;
}T Stack_Top(Stack* stk)
// 获取当前栈顶元素
{return stk->data[stk->top];
}T Stack_Push(Stack* stk, T e)
// 将元素e压入栈顶
// 返回栈顶点元素
{if(Stack_IsFull(stk)) {printf("Stack_IsFull(): stack full error when push element to the stack!\n");Stack_Free(stk);exit(0);}else{stk->top += 1;stk->data[stk->top] = e;return Stack_Top(stk);}
}T Stack_Pop(Stack* stk)
// 将栈顶元素出栈
// 返回栈顶元素
{if(Stack_IsEmpty(stk)) {printf("Stack_IsEmpty(): stack empty error when pop element of the stack top!\n");Stack_Free(stk);exit(0);}else{T topE = Stack_Top(stk);stk->top -= 1;return topE;}
}void Stack_Print(Stack* stk)
// 打印栈顶到栈低的元素
{if (Stack_IsEmpty(stk)) {printf("The stack is empty.\n");return;}//printf("The stack contains: ");for (int i=stk->top; i>=0; i--) {printf("%d", stk->data[i]);}printf("\n");}void Palindrome(T* str, int len)
//  利用stack栈判断字符串是否为回文串
//  输入参数:字符串序列,字符串长度
//  若是回文串输出YES,否则输出NO,末尾换行
{if(len==1){printf("YES\n");}else{Stack*s=Stack_Create(105);if(len%2!=0){for(int i=len/2;i<len;i++){str[i]=str[i+1];}for(int i=0;i<len-1;i++){char st=Stack_Top(s);if(st==str[i]){Stack_Pop(s);}else{Stack_Push(s,str[i]);}}if(Stack_IsEmpty(s)){printf("YES\n");}else{printf("NO\n");}}else{for(int i=0;i<len;i++){char st=Stack_Top(s);if(st==str[i]){Stack_Pop(s);}else{Stack_Push(s,str[i]);}}if(Stack_IsEmpty(s)){printf("YES\n");}else{printf("NO\n");}}}}

第3关:利用栈判断字符串是否为回文串相关推荐

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

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

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

    判断字符串是否为回文串 判断回文数(双指针法) 常规解法 public boolean IsPalindrome1(String A){char[] arrayA = A.toCharArray(); ...

  3. 利用python判断字符串是否为回文

    1 问题 如何用python判断字符串是否为回文. 2 方法 用两个变量left,right模仿指针(一个指向第一个字符,一个指向最后一个字符),每比对成功一次,left向右移动一位,right向左移 ...

  4. 判断字符串是否是回文串

    题目: 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, ...

  5. 编程判断输入的字符串是否是回文串。其中判断字符串是否为回文串要用函数实现。

    #include <stdio.h> #include <string.h> int f(char *p1) { int i,n=strlen(p1);for(i=0;i< ...

  6. 判断字符串是否为回文(C语言 顺序栈)

    首先我们需要确定思路,如何用栈来判断字符串是否为回文. 1.栈是先进后出 2.回文是指正读反读均相同的字符序列 从这两点很容易就可以联想到一个方法,我们先将字符串全部存进去栈中,再将它全部出栈,进行对 ...

  7. 1.7-33编程基础之字符串 33:判断字符串是否为回文

    33:判断字符串是否为回文 查看提交统计提问 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个字符串,输出该字符串是否回文.回文是指顺读和倒读都一样的字符串. 输入 输入为一行字 ...

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

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

  9. 判断字符串是否构成回文_构成字符串回文的最小删除数

    判断字符串是否构成回文 Problem statement: 问题陈述: Given string str find the minimum number of deletions such that ...

最新文章

  1. IMAP和POP3的相关知识与区别
  2. 死锁解决(oracle)
  3. 每日程序C语言26-直接选择排序
  4. struts学习笔记(一):Struts相关基础理论介绍
  5. 【转】CSS transitions#CSS3变换入门
  6. JAVA操作文件大全(一)
  7. Linux-常用软件源整理
  8. 左程云算法体系班笔记
  9. 牛年新生儿取名:用诗经给男宝宝起名字
  10. 如何提高自己的学习能力(JAVA篇)
  11. 说明书丨Abnova EDA(人)重组蛋白
  12. 神经网络Neural Networks概述
  13. SpringMvc国际化i18n
  14. 如何为PPT加上页码/总页码
  15. 四、软件概要设计说明书-模板
  16. webview 上打开QQ客户端,QQ登入后自动打开添加QQ群的方法
  17. matlab 符号表达式正负,如何在Matlab上为符号表达式编写`lhs()`或`rhs()`函数
  18. 4.24 使用形状生成器工具绘制星形图标 [Illustrator CC教程]
  19. 怎么在edge浏览器下载扩展(插件)
  20. 【完美解决】Word已经关闭但是任务管理器中仍有进程且占用CPU

热门文章

  1. 【调剂】燕山大学信息科学与工程学院今年预计招收工学调剂考生
  2. 获取钉钉花名册接口和枚举类
  3. 这些牛人,你能看的他们的脸
  4. GIS原理与应用(一)
  5. 数商云:引领化工业态数字升级,看摩贝如何快速打通全场景互融互通
  6. 【送书】Excel是最牛的数据分析工具,不接受反驳!
  7. 随机8位数字和字母组合的恶性U盘病毒的分析
  8. 音频服务器未能正常启动,Win10音频服务未正常运行怎么办?
  9. Minecraft正版安装OptiFine教程
  10. 要一直努力努力永不放弃