约瑟夫环之链表实现 C++实现
#include <iostream>
#include <stdlib.h>
using namespace std;
struct node{
int x;
//号码
int data;
//密码
struct node * next;
//下一个节点
};
typedef struct node *Link;
Link head =(Link)malloc(sizeof(Link));
//定义到全局,少写几个指针
void crea_list(int m){
//M人数
Link p=(Link)malloc(sizeof(Link));
head=p;
int i=1;
while(m--){
Link q=(Link)malloc(sizeof(Link));
q->x=i;
//号码从一遍历
cin>>q->data;
//密码要求输入
p->next=q;
p=p->next;
i++;
}
p->next=head->next;
//封闭
}
int main(){
int n,m;
cin>>n>>m;
crea_list(n);
Link temp=head;
int i=1;
while(temp->next!=temp->next->next){
if(i==m){
Link q=temp->next;
temp->next=temp->next->next;
i=1;
//初始报数
m=q->data;
//重新赋值M
cout<<q->x<<' ';
//输出出来的序列
free(q);
//解放多余的空间
}else{
i++;
temp=temp->next;
//报数到下一个人
}
}
cout<<temp->x;
//最后一个没有输出来,特殊处理
return 0;
}
这是数据结构老师,在课上布置的小问题,写来玩玩,嘻嘻嘻