实习1.2.cpp

来自「单循环存储结构实现约瑟夫环,n个人从1到n编码,然后围坐一圈,每人持有一密码」· C++ 代码 · 共 86 行

CPP
86
字号
#include<stdio.h>
#include<iostream.h>
int nm=1;
typedef struct LNode
{
    int s;
    int sq;
    struct LNode *next;
}LNode,*LinkList;
void Init(LinkList &L,int x)
{
    L=(LinkList)malloc(sizeof(LNode));
    L->s=nm++;
    L->sq=x;
    L->next=L;
}
void Insert(LinkList &L,int x)
{
    LNode *p,*q;
    Init(p,x); 
    p->next=L;
    q=L;
    while(q->next!=L)
    q=q->next;
    q->next=p;
}
int Delete(LinkList &L,LinkList &k,int &m)
{
  int b;
  LNode *p=k;
  while(L->next!=k)
     L=L->next;
  L->next=k->next;
  m=k->sq;
  b=k->s;k=k->next;
  p->next=NULL;
  return b;
} 
void Joseph(LinkList &L)
{
    LinkList p=L;
    cout<<"请输入报数上限值:"<<endl;
    int m;
    cin>>m;
    getchar();
    while(p->next!=L)
    {
       for(int i=1;i<m;i++)
       p=p->next;
       cout<<Delete(L,p,m)<<endl;
     }
     if(p->next==L)
     {
       cout<<Delete(L,p,m)<<endl;
     }
     cout<<Delete(L,p,m)<<endl;
}    
int main()
{
    LinkList L;
    int x;
    int n;
    cout<<"---------------约瑟夫环实验----------------"<<endl;
    cout<<"请输入参加实验的人数: "<<endl;
    cin>>n;
    getchar();
    cout<<"请输入各个人的密码: "<<endl;
    cin>>x;
    getchar();
    Init(L,x);
    for(int i=1;i<n;i++)
     {
         cin>>x;
         getchar();
         Insert(L,x);
      }    
    Joseph(L);
    cout<<"请输入由第几个人开始实验:"<<endl;
    cin>>x;
    return 2;
}    

    
                
            

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?