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

news/2024/7/7 20:18:47

#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");}}}}

http://lihuaxi.xjx100.cn/news/285910.html

相关文章

并查集 ---- 扩展域并查集判二分图 + 循环模拟字典树 The 2020 ICPC Asia Macau Regional Contest C. Club Assignment (详解)

题目链接 题目大意&#xff1a; 有n个数&#xff0c;现在要把他们拆分成两个集合&#xff0c;假设S为集合&#xff0c;有如下定义&#xff1a; f(S){min(x⊕y)∣x,y∈S,andx!y}f(S)\{min(x\oplus y)|x,y\in S,and\;x!y\}f(S){min(x⊕y)∣x,y∈S,andx!y} 将n个数拆分为两个集合…

实现Date函数属性中的format方法

js中没有Date.format方法的&#xff0c;所以在date属性中加format方法 //js格式化属性 Date.prototype.format function (format) {   var o {     "M": this.getMonth() 1, //month     "d": this.getDate(), //day     "h": …

网易开源支持图像识别的自动化UI测试工具,零基础亲测好评!

编辑 | Jane出品 | AI科技大本营AI科技大本营给大家推荐了很多有意思、适合开发者们的工具&#xff0c;比如代码修复神器、帮小白快速分析 Error、PDF 翻译工具、变量命名神器等等。今天&#xff0c;营长要专门给测试人员&#xff0c;或者想做测试的小伙伴们推荐一款工具&#…

[CQOI2009]中位数图 详细题解

题目链接&#xff1a; https://ac.nowcoder.com/acm/problem/19913 题目描述&#xff1a; 给出1~n的一个排列&#xff0c;统计该排列有多少个长度为奇数的连续子序列的中位数是b。中位数是指把所有元素从小到大排列后&#xff0c;位于中间的数。 题解&#xff1a; 因为中位数是…

容斥 + 爆搜打表 ---- 2020年南京icpc H.Harmonious Rectangle

题目链接 题目大意&#xff1a; 就是给你一个二维平面{(x,y)∣1≤x≤n,1≤y≤m}\{(x,y)|1\leq x\leq n,1\leq y \leq m\}{(x,y)∣1≤x≤n,1≤y≤m},你现在有3种颜色&#xff0c;你可以给写平面的点涂上颜色&#xff0c;问你至少存在4个点(x1,y1),(x2,y2),(x1,y2),(x2,y1)(x1,y…

坑爹的Python陷阱(避坑指南)

点击上方“视学算法”&#xff0c;星标公众号重磅干货&#xff0c;第一时间送达作者&#xff1a;xybaby来源&#xff1a;http://www.cnblogs.com/xybaby/我个人对陷阱的定义是这样的&#xff1a;代码看起来可以工作&#xff0c;但不是以你“想当然“”的方式。如果一段代码直接…

程序员单身比例有多高?【2019开发者图鉴】告诉你

编辑 | Jane 出品 | AI科技大本营 本次调查共 8 个问题&#xff0c;根据这些数字我们整理了《2019开发者图鉴》&#xff0c;下面营长将发现的一些有意思的数字分享给大家&#xff1a; 性别与年龄 本次参与调查的男女比例约为 8&#xff1a;2&#xff08;男8女2&#xff09;。 …

基于plc的自动洗碗机的设计(西门子)

目 录 摘 要 I Abstract II 1绪论 1 1.1全自动洗碗机的发展 1 1.2全自动洗碗机概述 2 1.2.1 全自动洗碗机的分类 2 1.2.2 全自动洗碗机的基本结构 3 1.2.3 全自动洗碗机的工作原理 4 1.3研究主要内容 4 2 全自动洗碗机机械设计 6 2.1 整体方案设计 6 2.2 各重要部件设计 6 2.2.…