这一篇博客以一些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;
}

(数据结构整理)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. 【 【henuacm2016级暑期训练】动态规划专题 P】Animals

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 第i只动物如果饲养它的话. 代价是固定的就是(n-i+1)a[i] 所以相当于给你n个物品,每个物品的重量为(n-i+1)a[i], ...

  2. COGS——T 1175. [顾研NOIP] 旅游电车

    http://www.cogs.pro/cogs/problem/problem.php?pid=1175 ★★☆   输入文件:buss.in   输出文件:buss.out   简单对比时间限制: ...

  3. 复习昨天的,继续过Hard题目

      # Title Editorial Acceptance Difficulty Frequency   . 65 Valid Number     12.6% Hard    . 126 Word ...

  4. 【Android】Android程序自己主动更新

    App自己主动更新的步骤可分为三步: 检查更新(假设有更新进行第2步,否则返回) 下载新版的APK安装包 安装APK 以下对这三步进行解释.当中会穿插相应代码.App自己主动更新的这三步所有被封装到了 ...

  5. Hibernate中session回话的get方法和load方法的区别

    1.报错方式不同: 前提:获取的数据不存在 get方法会报异常:空指针异常 load方法会报异常:对象为找到异常,给定值没有行存在. 2.load方法 这种方式总是会返回一个代理而不是真正得去查询数据 ...

  6. 【c++版数据结构】之顺序表的实现

    SeqList.h #ifndef SEQLIST_H #define SEQLIST_H #include<iostream> using namespace std; typedef ...

  7. AspNet WebApi 中应用fo-dicom抛出异常:No codec registered for tranfer syntax:

    背景: 在做一个Dicom Web Service, 当中WADO-RS中须要解析TransferSyntax, 然后就用到了fo-dicom中的DicomFile.ChangeTransferSyn ...

  8. AJAX入门---点滴的积累

    AJAX入门---点滴的积累 每次学习完一个内容总会写上几句话总结一下学习的内容.这不刚看完王兴魁老师讲的AJAX核心技术.如今回想梳理一下. 这套视频的内容不多,简单的解说了XMLHttpReque ...

  9. [雅礼NOIP2018集训 day4]

    感觉状态极差啊,今天居然爆零了 主要是以下原因: 1.又是T1看错题肝了两个小时,发现题意理解错误瞬间心态爆炸 2.T2交错了文件名 3.T3暴力子任务和正解(假的)混在一起,输出了两个答案 都想为自 ...

  10. 关于Tool接口--------hadoop接口:extends Configured implements Tool 和 ToolRunner.run

    我们在写Hadoop--map/reduce程序时,遇到使用按文件url来分析文件----------多表连接的DistributedCache方式,看不懂使用extends Configured i ...