码迷,mamicode.com
首页 > 其他好文 > 详细

约瑟夫环(循环链表)

时间:2018-12-21 14:12:03      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:++i   code   system   find   经典   自身   链表   ber   and   

约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(分别用编号 1,2,3,…,n 表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 开始,还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,直到圆桌上剩余一个人。

 

#include <iostream>

using namespace std;

struct person {
    int number;
    person *next;
};

person* initLink(int n) {
    person* head = new person;//定义首元节点
    head->number = 1;
    head->next = NULL;
    person* temp = head;
    for (int i = 2; i <= n; ++i) {//定义后面n-1个节点
        person* body = new person;
        body->number = i;
        body->next = NULL;
        temp->next = body;
        temp = temp->next;
    }
    temp->next = head;//首尾相连

    return head;
}

void FindAndDelete(person* head, int n, int num) {
    person* temp = head;
    while (temp->next != head) {//定位到首元节点前一节点
        temp = temp->next;
    }
    person* temp2 = head;
    while (temp2->number != n) {//定一个指针指向起始节点,一个定位到起始节点前一节点,为删除节点准备
        temp = temp2;
        temp2 = temp2->next;
    }
    while (temp2->next != temp2) {//当一个循环链表的节点->next指向自身,说明只剩一个节点
        for (int i = 1; i < num; ++i) {//一个节点定位到数到num的节点,一个定位到前一节点
            temp = temp2;
            temp2 = temp->next;
        }
        temp->next = temp2->next;//删除num节点
        cout << "序号为:" << temp2->number << "出列" << endl;//删除的节点为出列序列
        delete temp2;
        temp2 = temp->next;//从下一节点继续开始
    }
    cout << "最后剩下的同学序列是:" << temp2->number << endl;
    delete temp2;
}

int main()
{
    int n, k, num;
    cout << "请输入几位同学:";
    cin >> n;
    person* stu = initLink(n);
    cout << "请输入起始序列号(1~" << n << "):";
    cin >> k;
    cout << "请输入数到几出列:";
    cin >> num;
    FindAndDelete(stu, k, num);

    system("PAUSE");
    return 0;
}

 

约瑟夫环(循环链表)

标签:++i   code   system   find   经典   自身   链表   ber   and   

原文地址:https://www.cnblogs.com/Mayfly-nymph/p/10155279.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!