链表应用--PAT.1097.Deduplication on a Linked List
来源:互联网 发布:淘宝如何打印发货单 编辑:程序博客网 时间:2024/06/03 20:30
/**********************3stone***************************Problem: PAT.1097. Deduplication on a Linked List (25) Author:3stoneTime:2017/3/6 思路:【order:记录点的序号】 0、遍历链表,给order赋值 1、用map<int, bool>记录这个值是否出现过 2、用两个queue分别记录保留节点和删除节点的序号 ***********************3stone***************************/#include<cstdio>#include<algorithm>#include<map>#include<queue>#define maxSize 100010using namespace std;struct P{ int st, data, ed; int order;}point[maxSize];bool cmp1(P a, P b){ return a.order < b.order;}map<int, bool> value;queue<int> keep_que, del_que;int main(){ int n, start; while(scanf("%d%d", &start, &n) != EOF){ for(int i = 0; i < maxSize; i++)//初始化序号 point[i].order = maxSize; value.clear();//清空 map & queue while(del_que.empty() == false) del_que.pop(); while(keep_que.empty() == false) keep_que.pop(); for(int i = 0; i < n; i++){//输入数据 int ad; scanf("%d", &ad); point[ad].st = ad; scanf("%d%d", &point[ad].data, &point[ad].ed); }//for - i 输入数据 int num = 0; //遍历链表,记录序号 for(int pre = start; pre != -1; pre = point[pre].ed){ point[pre].order = ++num; } sort(point, point + maxSize, cmp1); for(int i = 0; i < num; i++){ int temp = point[i].data; if(value.find(abs(temp)) == value.end()){//此值第一次出现 value[abs(temp)] = true; keep_que.push(i);//入队列 } else{//已出现过 del_que.push(i); } } int now_p, next_p; while(keep_que.size() > 1){//输出保留链表 now_p = keep_que.front(); keep_que.pop(); next_p = keep_que.front(); printf("%05d %d %05d\n", point[now_p].st, point[now_p].data, point[next_p].st); } if(keep_que.size() != 0){//输出最后一个点 //防止链表只有一个点,所以要加判断 now_p = keep_que.front(); printf("%05d %d -1\n", point[now_p].st, point[now_p].data); } while(del_que.size() > 1){//输出删除链表 now_p = del_que.front(); del_que.pop(); next_p = del_que.front(); printf("%05d %d %05d\n", point[now_p].st, point[now_p].data, point[next_p].st); } if(del_que.size() != 0){ now_p = del_que.front(); printf("%05d %d -1\n", point[now_p].st, point[now_p].data); } }//while return 0;}
0 0
- 链表应用--PAT.1097.Deduplication on a Linked List
- PAT--1097. Deduplication on a Linked List
- 【PAT】1097. Deduplication on a Linked List
- PAT A 1097. Deduplication on a Linked List (25)
- PAT-A-1097. Deduplication on a Linked List (25)
- PAT A 1097. Deduplication on a Linked List (25)
- PAT 1097. Deduplication on a Linked List (25)(链表问题)(链表分段)
- PAT 1097 Deduplication on a Linked List
- pat 1097 Deduplication on a Linked List
- PAT-Deduplication on a Linked List (25)
- PAT 1097 Deduplication on a Linked List
- PAT-Deduplication on a Linked List
- PAT 1097. Deduplication on a Linked List (25)
- [PAT]1097. Deduplication on a Linked List (25)
- 【PAT】1097. Deduplication on a Linked List (25)
- PAT 1097. Deduplication on a Linked List (25)
- PAT 1097. Deduplication on a Linked List (25)
- 1097. Deduplication on a Linked List (25) PAT甲级
- java 并发计算数组和的示例
- Java Socket 编程
- python 多线程遍历windows盘符下文件操作
- 2017计划
- Flume的安装和测试
- 链表应用--PAT.1097.Deduplication on a Linked List
- RabbitMq学习笔记(五)—— Topic
- / ./ ../的区别
- Windows/Ubuntu操作系统下ArduPilot(APM)固件的编译方法
- 局部变量,外部变量,static局部变量,static外部变量
- 在毕设开发中遇到的问题1
- iOS 语音录制及播放,类似微信手势脱出取消,拖回继续录制。
- ThreadLocal详解
- 仿QQ音乐的歌词滚动