简单的循环链表

来源:互联网 发布:山村诡事以知天命 编辑:程序博客网 时间:2024/04/30 13:14

实验任务

初始的循环链表中有 n 个元素,编号为 1~n,m 次操作,每次操作删除一个数。m 次操作后,按顺序输出在链表中的元素编号。

数据输入

第一行有两个整数 n 和 m,代表 n 个元素和 m 次操作(1<=n<=1000,1<=m

数据输出

输出一行,按顺序输出在链表中的元素编号。

输入示例

5 3
1
2
3

输出示例

3 4

解题思路

用STL中的queue来模拟,其中怎么实现“循环”不太熟悉,还是想了挺久的…

参考代码

#include <iostream>  #include <cstdio>  #include <queue>  #include <algorithm>  using namespace std;  typedef deque<int>::iterator DIT;  int main()  {      int n,m;      while (~scanf("%d %d",&n,&m)){          int i,p,v = 0;          deque<int> Q;          for (i = 1;i <= n;i++)              Q.push_back(i);            for (i = 0;i < m;i++){              scanf("%d",&p);              v = (v+p)%(n-i); // 关键表达式...其实就是 【当前位置 + 往后几个人 再对 总人数 取模】 起到循环的作用            Q.erase(Q.begin()+v);          }          DIT pos = Q.begin();          for (;pos != Q.end()-1;pos++)              printf("%d ",*pos);          printf("%d\n",*pos);          }      return 0;  }
0 0
原创粉丝点击