UVa 11998 破碎的键盘(数组实现链表)
2024-08-31 06:19:21
题意:
输入一行字符,其中包含'[' 和 ‘]’, 意思为键盘上的home 和 end 键, 然后模拟字符在键盘上输入。 输入一行最终的结果
分析:
用数组模拟一个链表, 在链表的头尾插入字母然后输出即可, 方法需要多加练习才能练熟, 其实跟邻接表有点像。
为了方便起见,常常在链表的第一个元素之前放一个虚拟结点。
#include <bits/stdc++.h>
using namespace std;
const int maxl = + ;
int main()
{ char str[maxl];
int cur, last;
int next[maxl];//next[index] 就是str[index]的下一个字母是 str[next[index]]
//为了方便起见,常常在链表的第一个元素之前放一个虚拟结点。 所以从str+1开始
while(~scanf("%s", str+))
{
int len = strlen(str+);
next[] = ;//一开始next指向虚拟节点
cur = last = ;
for(int i = ; i <= len; i++){
if(str[i] == '['){
cur = ;
}
//光标位于cur后面 cur...|
else if(str[i] == ']'){
cur = last;
}
else{ next[i] = next[cur];
next[cur] = i;
/*注意这两句 当cur = 0, i = 1时,
next[1] = next[0] ------------ 把虚拟节点接到next[1]上
next[0] = 1 ------------ 把0的下一个接为1
这就实现了next0转移到了next1 next0 变为 1
*/
if(cur == last) last = i;
cur = i;
}
} for(int i = next[]; i != ; i = next[i]){
printf("%c", str[i]);
}
puts("");
}
}
最新文章
- hdu 5229 找规律
- 善用VS中的Code Snippet来提高开发效率
- 《Linux内核设计与实现》CHAPTER4阅读梳理
- XE6移动开发环境搭建之IOS篇(6):设置Mac OSX的网络。(有图有真相)
- Velocity魔法堂系列一:入门示例
- C++的辅助工具介绍 [转]
- VTL说明文档
- C# List
- mysql数据库sql优化
- 常用mysql命令
- 每天一个linux命令(27)--tar命令
- 关于在eclipse上部署Tomcat时出现8080等端口被占用问题的解决方法
- 201521123084 《Java程序设计》第10周学习总结
- Hype-v 共享文件办法
- 【C++】纯C++实现http打开网页下载内容的功能
- jQuery获取元素的方法
- MySQL 三 二进制安装
- [APC001] D Forest
- [AI]神经网络章3 损失函数
- Dependency Injection in ASP.NET Web API 2 Using Unity
热门文章
- [USACO 2011 Nov Gold] Above the Median【逆序对】
- DP Codeforces Round #260 (Div. 1) A. Boredom
- 动态链接库(DLL) 分类: c/c++ 2015-01-04 23:30 423人阅读 评论(0) 收藏
- Python的数据类型:list和tuple
- DEV—【GridControl添加按钮列】
- jQuery幸运大转盘_jQuery+PHP抽奖程序
- Unity笔记(4)自学第四、五天
- webstorm里直接调用命令行
- Swift3命名空间的实现
- Android学习——蓝牙通讯