数据结构——单向循环链表实现约瑟夫环

  • Post author:
  • Post category:其他


#include <stdlib.h>

#include<iostream>

using namespace std;

struct CrLink

{


int  Number;  //编号

int Cipher;//密码

CrLink *next;//下一个节点

};

int main()

{


int n;

int m;

cout<<“please input how much people(n<=30)”<<endl;

cin>>n;

cout<<“please input the first”<<endl;

cin>>m;

CrLink *L;

int i;

//建立循环链表

CrLink *p;//移动指针

L=p=new CrLink ; //创建第一个节点

for(i=1;i<n;i++)//在该循环中构造剩余的n-1个节点

{


p->Number=i;

cout<<“输入第”<<i<<endl;

cin>>p->Cipher;            //赋值

p->next=new CrLink;

p=p->next;

}

p->Number=i;

cout<<“输入第”<<i<<endl;

cin>>p->Cipher;

p=p->next=L;//结尾返回至第一个节点

//约瑟夫环问题

while(p->next!=p)

{


for(i=1;i<m;i++)//不断将p后移至m

p=p->next;

cout<<p->Number<<‘ ‘;//输出m的编码

m=p->Cipher;//改变m的值

CrLink *q=p;

while(q->next!=p)

{


q=q->next;//找到n前的节点

}

q->next=p->next;//跳过节点并删除

free(p);

p=q->next;

}

cout<<p->Number<<endl;//输出最后一个人的编码

free(p);//删除最后一个节点

return 0;

}



版权声明:本文为hrainning原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。