这一篇博客以一些OJ上的题目为载体,整理一下数据结构。会陆续的更新。

。。

我们都知道,数据结构的灵活应用有时能让简化一些题目的解答。

一、栈的应用

1、NJUPT OJ 1054(回文串的推断)

回文串的推断:将一个字符串的一半存入一个栈中。然后从栈顶開始推断这个字符串是否是回文串

/** NJUPTOJ_1054.cpp**  Created on: 2014年5月22日*      Author: pc*/#include <iostream>
#include <cstdio>using namespace std;const int maxn = 300;void toLower(char arr[],int len){int i;for(i = 0 ; i < len ; ++i){if(!islower(arr[i])){arr[i] += 32;}}
}int main(){char a[maxn];char s[maxn];while(gets(a)!=NULL){int len = strlen(a);toLower(a,len);int mid = len/2 - 1;int top = 0;int i;for(i = 0 ; i <= mid ; ++i){s[++top] = a[i];}int next;if(len%2 == 0){next = mid+1;}else{next = mid+2;}for(i = next ; i <= len-1 ; ++i){if(s[top] != a[i]){break;}--top;}if(top != 0){printf("Not Palindrome.\n");}else{printf("Bingle! Palindrome.\n");}}return 0;}

下面是再次做这道题时的代码:

/** njupt_1054_1.cpp**  Created on: 2014年9月6日*      Author: pc*/#include <iostream>
#include <cstdio>using namespace std;const int maxn = 300;/*** 将一个字符串转化成小写*/
void toLower(char a[]){int len = strlen(a);int i;for(i = 0 ; i < len ; ++i){if(islower(a[i]) == false){a[i] += 32;}}
}void work(char a[]){int len = strlen(a);int s[len];/***关于mid和next额理解:*mid: 用来标记開始比較时栈顶的第一个元素*next: 用来比較剩下的一半的字符串中開始比較时的第一个元素的位置*/int mid = len/2 - 1;int next;if(len%2 == 0){next = mid+1;}else{next = mid+2;}int top = 0;int i;for(i = 0 ; i <= mid ; ++i){s[++top] = a[i];}for(i = next ; i <= len-1 ; ++i){if(s[top] != a[i]){break;}--top;}if(top == 0){printf("Bingle! Palindrome.\n");}else{printf("Not Palindrome.\n");}}int main(){char s[maxn];/*** 不知道行数时的输入的处理方式...*/while(gets(s) != NULL){toLower(s);work(s);}return 0;}

2、NEFU OJ 194 回文字符串

算法思想和上面的是一样的

/** NEFU_194.cpp**  Created on: 2014年5月23日*      Author: pc*/#include <iostream>
#include <cstdio>using namespace std;string a;
string s;int main() {int t;scanf("%d", &t);while (t--) {cin >> a;int len = a.length();int mid = len / 2 - 1;int top = 0;int i;for (i = 0; i <= mid; ++i) {top += 1;s[top] = a[i];}int next;if (len % 2 == 0) {next = mid + 1;} else {next = mid + 2;}for (i = next; i <= len - 1; ++i) {if (s[top] != a[i]) {break;}--top;}if (top != 0) {printf("NO\n");} else {printf("YES\n");}}return 0;
}

3、NYOJ 1002 括号的匹配

思想:假设输入的符号是(、[则直接进栈,假设是],则推断此事最后一个是否是[,假设是[出栈,否则]进栈

/** NY_2_1.cpp**  Created on: 2014年5月25日*      Author: pc*/#include <iostream>
#include <cstdio>
#include <stack>using namespace std;int main(){string a;int t;scanf("%d",&t);while(t--){stack<char> s;cin >> a;int len = a.length();int i;for(i = 0 ; i < len ; ++i){if(a[i] == '(' || a[i] == '['){s.push(a[i]);}else if(a[i] == ')'){if(!s.empty() && s.top() == '('){s.pop();}else{s.push(a[i]);}}else if(a[i] == ']'){if(!s.empty() && s.top() == '['){s.pop();}else{s.push(a[i]);}}}if(s.empty()){printf("Yes\n");}else{printf("No\n");}}return 0;
}

转载于:https://www.cnblogs.com/lytwajue/p/7027190.html

(数据结构整理)NJUPT1054相关推荐

  1. python中列表是什么样的数据结构_Python中列表、字典、元组、集合数据结构整理...

    Python常见数据结构整理 Python中常见的数据结构可以统称为容器(container).序列(如列表和元组).映射(如字典)以及集合(set)是三类主要的容器. 一.序列(列表.元组和字符串) ...

  2. 数据结构|-常见数据结构整理

    归纳总结了一下数据机构的常用类型,个人理解常用的数据机构可以分为线性表.栈.队列.树,线性表包括顺序表和链表,栈和队列应当属于特殊的线性表,有几个概念和误区需要先说一下 顺序表和线性表的关系: 线性表 ...

  3. Python常见数据结构整理

    Python中常见的数据结构可以统称为容器(container).序列(如列表和元组).映射(如字典)以及集合(set)是三类主要的容器. 一.序列(列表.元组和字符串) 序列中的每个元素都有自己的编 ...

  4. Python常见数据结构整理,分享给你们

    Python中常见的数据结构可以统称为容器(container).序列(如列表和元组).映射(如字典)以及集合(set)是三类主要的容器. 一.序列(列表.元组和字符串) 序列中的每个元素都有自己的编 ...

  5. python常用数据结构_Python常见数据结构整理

    Python 常见数据结构详解 这篇文章主要介绍了 Python 常见数据结构 , 需要的朋友可以参考下 本文详细罗列归纳了 Python 常见数据结构,并附以实例加以说明,相信对读者有一定的参 考借 ...

  6. 数据结构整理笔记(提纲) (数据结构 C语言版 第二版 严蔚敏)

    第一章 绪论 基本概念 数据结构(这门学科): 是一门研究数据的组织, 存储, 和运算的一般方法. 数据: 是客观事物的符号表示, 是所有能输入到计算机中并被计算机程序处理的符号的总称. 数据元素: ...

  7. 大话计算机知识流程图,大话数据结构 -- 整理归纳(1)

    第 1 章 数据结构绪论 程序 = 数据结构 + 算法 数据结构:是相互之间存在的一种或多种特定关系的数据元素的集合. 为编写出一个"好"的程序,必须分析待处理对象的特性及各处理对 ...

  8. python整理数据_Python常见数据结构整理

    一.序列(列表.元组和字符串) 序列中的每个元素都有自己的编号.Python中有6种内建的序列.其中列表和元组是最常见的类型.其他包括字符串.Unicode字符串.buffer对象和xrange对象. ...

  9. libev源码分析(一)libev数据结构整理

    这里选取的版本为最新版:libev-4.04.libev的代码很简练,除了对高效I/O模型等的封装文件,核心文件就两个:ev.h和ev.c,其中ev.c大概4000行左右.代码大量用到了宏,并且宏还嵌 ...

  10. 【Node.js】写一个数据自动整理成表格的脚本

    前言 企业项目进行数据埋点后,埋点事件名需要整理成Excel表格便于统计,目标是将下图左侧数据转化成下图右侧的Excel表格: 考虑到左侧埋点数据是随项目迭代增加的,埋点数据每增加一次我就要把数据一条 ...

最新文章

  1. Linux系统目录结构说明
  2. Android Studio快捷键之代码提示
  3. C语言实现随机生成0~100的数
  4. c语言可变入参中的每个参数的类型可以不同,编程入门:浅谈C语言的可变参数
  5. python面向对象编程之访问限制
  6. 以厘php框架 v10.6.8
  7. Ubuntu16.04--code::blocks16.01 的代码拷贝到Windows 8.1--visual studio 2013 注意事项
  8. 欢乐大作战服务器维护,欢乐大作战
  9. mysql游标嵌套怎么写,mysql游标和嵌套游标
  10. 物联网常用天线,按照使用场景分类,主要有哪些?
  11. stata15中文乱码_一次性解决Stata中文乱码问题
  12. 一、Fiddler抓包工具 — Fiddler介绍与安装
  13. 开放耳机有什么优缺点,推荐几款不错的开放式耳机
  14. XUPT_ACM2021寒假训练第一周练习记录
  15. 每天干的啥?(2019.9)
  16. 帕斯卡三角形题解(Python代码实现)
  17. Spark的现状与未来发展
  18. php 中遍历数组时使用引用出现的问题
  19. 正多边形的数学推导及绘制
  20. 在甲骨文云容器实例(Container Instances)上部署Alist

热门文章

  1. 物质的粒子应该是空心的
  2. LINUX SHELL脚本中获得用户主目录
  3. 这不是海市蜃楼,这是平地雾
  4. deepstream-app源码没有公开,预计3.0可能公开
  5. 错误解决办法:zipimport.ZipImportError: can't decompress data; zlib not available
  6. 漏桶算法和令牌桶算法
  7. day21保护操作系统
  8. nginx 日志正则分割
  9. mysql 连接数和内存的关系_php-fpm进程数和mysql连接数之间的关系
  10. php 忽略加载动态某个目录,php – 如何使用RecursiveIteratorIterator忽略目录?