(数据结构整理)NJUPT1054
来源:互联网 发布:阿里云账号 编辑:程序博客网 时间:2024/06/03 08:20
这一篇博客以一些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;}
7 0
- (数据结构整理)NJUPT1054
- 数据结构整理
- 数据结构代码整理(1)
- 数据结构代码整理(2)
- 整理--数据结构--线性表
- 整理:数据结构面试大全
- 整理--数据结构--线性表
- java的数据结构整理
- C#数据结构文章整理
- 数据结构要点整理
- Java数据结构内容整理
- 常用数据结构整理
- 数据结构学习整理
- 数据结构学习整理目录
- 数据结构知识点总结整理
- Java数据结构内容整理
- 数据结构与算法整理
- 数据结构 整理笔记
- 使用poi解析Excel
- boost目录翻译序
- Android开发中4种Onclick事件的实现
- 使用DB2时发生该错误: SQLCODE=-668 不能向用EDITPROC定义的表中添加列
- hdu 1878 欧拉回路 无向图连通性
- (数据结构整理)NJUPT1054
- 黑马程序员——浅谈I/O流
- 学习记录:我来说卷积
- jquery 中的each()怎么跳出循环
- leetcode:ZigZag Conversion
- 用MSP430F247硬件IIC控制PCF8591转换模块
- WINDOWS蓝屏解决对策
- 驱动开发,竞发并态控制
- shell 编程记录