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

约瑟夫环0数据结构—线性实习题目(二)2_第1张图片数据结构—线性实习题目(二)2_第2张图片

#include 

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;
}

你可能感兴趣的:(数据结构,数据结构,c++,算法)