第3关:利用栈判断字符串是否为回文串
#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关:利用栈判断字符串是否为回文串相关推荐
- JAVA语言:利用递归方法判断字符串是否为回文
java练习:利用递归方法判断字符串是否为回文(java程序语言设计课后习题4.21) 回文:字符串正向输出和逆向输出结果相同 ,如12321 源代码如下: import java.util.Scan ...
- 判断字符串是否为回文串
判断字符串是否为回文串 判断回文数(双指针法) 常规解法 public boolean IsPalindrome1(String A){char[] arrayA = A.toCharArray(); ...
- 利用python判断字符串是否为回文
1 问题 如何用python判断字符串是否为回文. 2 方法 用两个变量left,right模仿指针(一个指向第一个字符,一个指向最后一个字符),每比对成功一次,left向右移动一位,right向左移 ...
- 判断字符串是否是回文串
题目: 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, ...
- 编程判断输入的字符串是否是回文串。其中判断字符串是否为回文串要用函数实现。
#include <stdio.h> #include <string.h> int f(char *p1) { int i,n=strlen(p1);for(i=0;i< ...
- 判断字符串是否为回文(C语言 顺序栈)
首先我们需要确定思路,如何用栈来判断字符串是否为回文. 1.栈是先进后出 2.回文是指正读反读均相同的字符序列 从这两点很容易就可以联想到一个方法,我们先将字符串全部存进去栈中,再将它全部出栈,进行对 ...
- 1.7-33编程基础之字符串 33:判断字符串是否为回文
33:判断字符串是否为回文 查看提交统计提问 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个字符串,输出该字符串是否回文.回文是指顺读和倒读都一样的字符串. 输入 输入为一行字 ...
- C语言试题三十一之判断字符串是否为回文?若是则函数返回1,主函数中输出yes,否则返回0,主函数中输出no。回文是指顺读和倒读都是一样的字符串。
1. 题目 请编写函数function,该函数的功能是:判断字符串是否为回文?若是则函数返回1,主函数中输出yes,否则返回0,主函数中输出no.回文是指顺读和倒读都是一样的字符串. 2 .温馨提示 ...
- 判断字符串是否构成回文_构成字符串回文的最小删除数
判断字符串是否构成回文 Problem statement: 问题陈述: Given string str find the minimum number of deletions such that ...
最新文章
- IMAP和POP3的相关知识与区别
- 死锁解决(oracle)
- 每日程序C语言26-直接选择排序
- struts学习笔记(一):Struts相关基础理论介绍
- 【转】CSS transitions#CSS3变换入门
- JAVA操作文件大全(一)
- Linux-常用软件源整理
- 左程云算法体系班笔记
- 牛年新生儿取名:用诗经给男宝宝起名字
- 如何提高自己的学习能力(JAVA篇)
- 说明书丨Abnova EDA(人)重组蛋白
- 神经网络Neural Networks概述
- SpringMvc国际化i18n
- 如何为PPT加上页码/总页码
- 四、软件概要设计说明书-模板
- webview 上打开QQ客户端,QQ登入后自动打开添加QQ群的方法
- matlab 符号表达式正负,如何在Matlab上为符号表达式编写`lhs()`或`rhs()`函数
- 4.24 使用形状生成器工具绘制星形图标 [Illustrator CC教程]
- 怎么在edge浏览器下载扩展(插件)
- 【完美解决】Word已经关闭但是任务管理器中仍有进程且占用CPU