单向循环链表简单应用
程序员文章站
2024-03-23 21:35:58
...
如题,给出n,s,m三个整数。n个人围成一圈,从第s个人开始从1数数,数到第m的人退出圈子,然后从下一个人又开始从1数数,数到第m的人退出。如此循环下去,输出这n个人退出的顺序。
解决的一种方法就是应用单项循环链表,进行模拟。代码如下:
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
using namespace std;
#define pnode struct node*
#define cre_sp (pnode)malloc(sizeof(struct node))
struct node
{
int info;
pnode link;
};
void create(pnode &head,int n)
{
pnode p;
pnode q;
p=head=cre_sp;
p->info=1;
p->link=p;
for(int i=2;i<n+1;i++)
{
q=cre_sp;
q->info=i;
q->link=p->link;//头尾相连
p->link=q;
p=q;
}
free(p);
free(q);
}
void delt(pnode &head,int s,int m)
{
pnode pre=head;
if(s!=1)
{
for(int i=2;i<s;i++)
{
pre=pre->link;
}
}
while(pre!=pre->link)
{
for(int i=2;i<=m;i++)
{
pre=pre->link;
}
cout<<pre->link->info<<endl;
pre->link=pre->link->link;//结点新建连接表示一个人退出
}
cout<<pre->info<<endl<<"done";
free(pre);
}
int main()
{
int n,s,m;
pnode head;
cin>>n>>s>>m;
create(head,n);
delt(head,s,m);
return 0;
}
上一篇: 如何kill同一个应用的所有进程
下一篇: 腾讯地图 !获取经纬度