数据结构—线性实习题目(二)2

约瑟夫环0

#include <iostream>

using namespace std;

struct Student {
    Student* next;
    string Name, Gender, Class, Condition;
    int Id, Age;
    Student() {
        next = NULL;
    }
    Student(string name, int id, string gender, int age, string c, string con) {
        Name = name;
        Id = id;
        Gender = gender;
        Age = age;
        Class = c;
        Condition = con;
        next = NULL;
    }
    void Print() {
        cout << Name << " " << Id << " ";
        cout << Gender << " " << Age << " " << Class <<
             " " << Condition << endl ;
    }


};

class StuCircList {
  private:
    Student* head, *rear;
    int length;
  public:
    StuCircList() {
        head = new Student;
        rear = new Student;
    }

    StuCircList(int n) {
        length = n;
        string name, gender, c, con;
        int id, age;
        cin >> name;
        cin >> id;
        cin >> gender;
        cin >> age;
        cin >> c >> con;
        head = new Student(name, id, gender, age, c, con);
        rear = head;
        for (int i = 1; i < n; i++) {
            cin >> name;
            cin >> id;
            cin >> gender;
            cin >> age;
            cin >> c >> con;
            Student* stu = new Student(name, id, gender, age, c, con);
            rear->next = stu;
            rear = rear->next;
        }
        rear ->next = head;
    }
    Student* Locate(Student* s, int i) { //定位到第i个, i= 1 2 3
        if (i <= 0 || i > length)
            return NULL;
        Student* current = s;
        for (int j = 1; j < i; j++)
            current = current->next;
        return current;
    }

    void Game(int m) {
        Student* temp = head;
        while (length != 1 ) {
            Student* pre = Locate(temp, m - 1);
            for (int i = 1; i < m; i++) {
                temp = temp->next;
            }
            pre->next = temp->next;
            temp->Print();
            delete temp;
            length--;
            temp = pre->next;
        }
        temp->Print();
    }

    void Print() {
        Student* current = head;
        for (int i = 0; i < length; i++) {
            cout << current->Name << " " << current->Id << " ";
            cout << current->Gender << " " << current->Age << " " <<
                 current->Class << " " << current->Condition << endl;
            current = current->next;
        }
    }
};

int main() {
    int m, n;
    cin >> n >> m;
    StuCircList scl(n);
    scl.Game(m);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

511511511

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值