约瑟夫环之链表实现 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;
}
这是数据结构老师,在课上布置的小问题,写来玩玩,嘻嘻嘻

posted @ 2020-10-06 19:15  嘻嘻嘻ziixi  阅读(197)  评论(0编辑  收藏  举报