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

。。

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

一、栈的应用

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

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

  1. /*
  2. * NJUPTOJ_1054.cpp
  3. *
  4. * Created on: 2014年5月22日
  5. * Author: pc
  6. */
  7.  
  8. #include <iostream>
  9. #include <cstdio>
  10.  
  11. using namespace std;
  12.  
  13. const int maxn = 300;
  14.  
  15. void toLower(char arr[],int len){
  16. int i;
  17. for(i = 0 ; i < len ; ++i){
  18. if(!islower(arr[i])){
  19. arr[i] += 32;
  20. }
  21. }
  22. }
  23.  
  24. int main(){
  25. char a[maxn];
  26. char s[maxn];
  27.  
  28. while(gets(a)!=NULL){
  29.  
  30. int len = strlen(a);
  31. toLower(a,len);
  32.  
  33. int mid = len/2 - 1;
  34.  
  35. int top = 0;
  36. int i;
  37. for(i = 0 ; i <= mid ; ++i){
  38. s[++top] = a[i];
  39. }
  40.  
  41. int next;
  42. if(len%2 == 0){
  43. next = mid+1;
  44. }else{
  45. next = mid+2;
  46. }
  47.  
  48. for(i = next ; i <= len-1 ; ++i){
  49. if(s[top] != a[i]){
  50. break;
  51. }
  52.  
  53. --top;
  54. }
  55.  
  56. if(top != 0){
  57. printf("Not Palindrome.\n");
  58. }else{
  59. printf("Bingle! Palindrome.\n");
  60. }
  61. }
  62.  
  63. return 0;
  64.  
  65. }

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

  1. /*
  2. * njupt_1054_1.cpp
  3. *
  4. * Created on: 2014年9月6日
  5. * Author: pc
  6. */
  7.  
  8. #include <iostream>
  9. #include <cstdio>
  10.  
  11. using namespace std;
  12.  
  13. const int maxn = 300;
  14.  
  15. /**
  16. * 将一个字符串转化成小写
  17. */
  18. void toLower(char a[]){
  19. int len = strlen(a);
  20. int i;
  21. for(i = 0 ; i < len ; ++i){
  22. if(islower(a[i]) == false){
  23. a[i] += 32;
  24. }
  25. }
  26. }
  27.  
  28. void work(char a[]){
  29.  
  30. int len = strlen(a);
  31. int s[len];
  32.  
  33. /**
  34. *关于mid和next额理解:
  35. *mid: 用来标记開始比較时栈顶的第一个元素
  36. *next: 用来比較剩下的一半的字符串中開始比較时的第一个元素的位置
  37. */
  38. int mid = len/2 - 1;
  39. int next;
  40. if(len%2 == 0){
  41. next = mid+1;
  42. }else{
  43. next = mid+2;
  44. }
  45.  
  46. int top = 0;
  47. int i;
  48. for(i = 0 ; i <= mid ; ++i){
  49. s[++top] = a[i];
  50. }
  51.  
  52. for(i = next ; i <= len-1 ; ++i){
  53. if(s[top] != a[i]){
  54. break;
  55. }
  56.  
  57. --top;
  58. }
  59.  
  60. if(top == 0){
  61. printf("Bingle! Palindrome.\n");
  62. }else{
  63. printf("Not Palindrome.\n");
  64. }
  65.  
  66. }
  67.  
  68. int main(){
  69.  
  70. char s[maxn];
  71.  
  72. /**
  73. * 不知道行数时的输入的处理方式...
  74. */
  75. while(gets(s) != NULL){
  76. toLower(s);
  77. work(s);
  78. }
  79.  
  80. return 0;
  81.  
  82. }

2、NEFU OJ 194 回文字符串

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

  1. /*
  2. * NEFU_194.cpp
  3. *
  4. * Created on: 2014年5月23日
  5. * Author: pc
  6. */
  7.  
  8. #include <iostream>
  9. #include <cstdio>
  10.  
  11. using namespace std;
  12.  
  13. string a;
  14. string s;
  15.  
  16. int main() {
  17. int t;
  18. scanf("%d", &t);
  19. while (t--) {
  20.  
  21. cin >> a;
  22. int len = a.length();
  23.  
  24. int mid = len / 2 - 1;
  25.  
  26. int top = 0;
  27. int i;
  28.  
  29. for (i = 0; i <= mid; ++i) {
  30. top += 1;
  31. s[top] = a[i];
  32. }
  33.  
  34. int next;
  35. if (len % 2 == 0) {
  36. next = mid + 1;
  37. } else {
  38. next = mid + 2;
  39. }
  40.  
  41. for (i = next; i <= len - 1; ++i) {
  42. if (s[top] != a[i]) {
  43. break;
  44. }
  45.  
  46. --top;
  47. }
  48.  
  49. if (top != 0) {
  50. printf("NO\n");
  51. } else {
  52. printf("YES\n");
  53. }
  54. }
  55.  
  56. return 0;
  57. }

3、NYOJ 1002 括号的匹配

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

  1. /*
  2. * NY_2_1.cpp
  3. *
  4. * Created on: 2014年5月25日
  5. * Author: pc
  6. */
  7.  
  8. #include <iostream>
  9. #include <cstdio>
  10. #include <stack>
  11.  
  12. using namespace std;
  13.  
  14. int main(){
  15.  
  16. string a;
  17. int t;
  18. scanf("%d",&t);
  19. while(t--){
  20. stack<char> s;
  21.  
  22. cin >> a;
  23. int len = a.length();
  24. int i;
  25. for(i = 0 ; i < len ; ++i){
  26. if(a[i] == '(' || a[i] == '['){
  27. s.push(a[i]);
  28. }else if(a[i] == ')'){
  29. if(!s.empty() && s.top() == '('){
  30. s.pop();
  31. }else{
  32. s.push(a[i]);
  33. }
  34. }else if(a[i] == ']'){
  35. if(!s.empty() && s.top() == '['){
  36. s.pop();
  37. }else{
  38. s.push(a[i]);
  39. }
  40. }
  41. }
  42.  
  43. if(s.empty()){
  44. printf("Yes\n");
  45. }else{
  46. printf("No\n");
  47. }
  48. }
  49.  
  50. return 0;
  51. }

(数据结构整理)NJUPT1054的更多相关文章

  1. 转 Python常见数据结构整理

    http://www.cnblogs.com/jeffwongishandsome/archive/2012/08/05/2623660.html Python常见数据结构整理 Python中常见的数 ...

  2. Java数据结构整理(一)

    ava数据结构内容整理关键字: 数据结构 Collection:List.SetMap:HashMap.HashTable如何在它们之间选择一.Array , ArraysJava所有“存储及随机访问 ...

  3. redis数据结构整理(二)

    摘要: 1.各个数据结构的应用举例 1.1 String类型应用举例 1.2List类型应用举例 1.3Set类型应用举例 1.4Sorted Set类型应用举例 1.5Hash类型应用举例 内容: ...

  4. redis数据结构整理(一)

    摘要: 0.redis安装 1.redis的常用数据结构类型 1.1  String 1.2  List 1.3  Set 1.4  Sorted Set 1.5  Hash 2.redis是单进程单 ...

  5. C++ 基本数据结构整理

    Hash Map (Unordered_map) Insert #include <unordered_map> using namespace std; unordered_map &l ...

  6. java数据结构整理(二)

    一.List接口,有序的Collection接口,能够精确地控制每个元素插入的位置,允许有相同的元素 1.链表,LinkedList实现了List接口,允许null元素,提供了get().remove ...

  7. Python常见数据结构整理

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

  8. java常见数据结构整理

    java中容器类数据结构主要在java.util包中. java.util包中三个重要的接口及特点:List(列表).Set(保证集合中元素唯一).Map(维护多个key-value键值对,保证key ...

  9. acm数据结构整理

    一.区间划分 //区间划分+持久化并查集:区间连通情况统计. inline bool comp(Ask x, Ask y){return x.km == y.km ? x.l > y.l : x ...

随机推荐

  1. Mybatis解决了JDBC编程哪些问题

    一:Mybatis简介 MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创 ...

  2. linux下使用DBCA(database configuration assistant)创建oracle数据库

    前提:切换到图形界面 到Oracle的bin文件夹下,使用oracle用户.运行dbca就可以.和windows的效果一样. 假设出现乱码 export LANG="en_US:UTF-8& ...

  3. 带输出參数的存储过程的定义,以及在aso.net中调用

    ALTER proc [dbo].[mp_w_RechargePortalPayPal_All] ( @PayPalOrderNo nvarchar(50), --订单号 @nAccountIDFro ...

  4. 根据数据表自动生成javaBean

    package fanshe; import java.io.File; import java.io.FileWriter; import java.io.IOException; import j ...

  5. org.hibernate.AssertionFailure: null id in com.you.model.User entry (don&#39;t flush the Session after a

    1.错误描写叙述 org.hibernate.AssertionFailure: null id in com.you.model.User entry (don't flush the Sessio ...

  6. 【Bootstrap】一个PC、平板、手机同一时候使用并且美观的登陆页面

    Bootstrap如同前台框架,它已经布置好不少的CSS.前端开发的使用须要则直接调用就可以.其站点的网址就是http://www.bootcss.com.使用Bootstrap能降低前端开发时候在C ...

  7. bzoj1019: [SHOI2008]汉诺塔(动态规划)

    1019: [SHOI2008]汉诺塔 题目:传送门 简要题意: 和经典的汉诺塔问题区别不大,但是题目规定了一个移动时的优先级: 如果当前要从A柱子移动,但是A到C的优先级比A到B的优先级大的话,那就 ...

  8. ANSI编码

    ANSI编码 ANSI简介 不同的国家和地区制定了不同的标准,由此产生了 GB2312.GBK.Big5.Shift_JIS 等各自的编码标准.这些使用 1 至 4 个字节来代表一个字符的各种汉字延伸 ...

  9. javascript系列-class9.DOM(上)

    欢迎加入前端交流群交流知识获取视频资料:749539640 1.文档对象模型DOM(document Object Model)        所谓DOM就是以家族的形式描述HTML       节点 ...

  10. [codeforces 1037D] Valid BFS? 解题报告(验证bfs序,思维题)

    题目链接:http://codeforces.com/problemset/problem/1037/D 题目大意: 给出一棵树,询问一个序列是否可能为这棵树从节点1开始遍历的bfs序 题解: 对于每 ...