2数据结构与算法-单向循环链表--约瑟夫环

本文介绍了约瑟夫环问题,通过单向循环链表来解决死亡顺序的问题,详细阐述了算法的实现过程。
摘要由CSDN通过智能技术生成

1.单向循环链表--约瑟夫环

约瑟夫环背景

死亡顺序如下

// 循环链表-瑟比夫环.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*模拟瑟比夫环,输出淘汰的顺序*/
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef  int ElemType;
class Node
{
public:
    Node* next;
    ElemType data;
};
class YueList
{
public:
    Node* head;
    int length=0;
    YueList();
    Node* CreateCir(int n);
    void KillNode(Node *newhead);
    //bool TravList();
};
YueList::YueList()
{
    head = new Node;
    head->next = NULL;
    head->data = 0;
}
Node* YueList::CreateCir(int n)
{
    Node* p, * s=NULL; //bug, 指针s必须要初始化
    int i = 1;
    p = head;
    while (i<=n)
    {
        s = new Node;
        s->data = i++;
        p->next = s;
        p = s;
    }
    s->next = head->next;
    delete head; //删除头结点
    return s->next; //返回第一个节点的地址
}
void YueList::KillNode(Node *newhead)
{
    Node* p,*q;
    int m = 3;
    p = newhead;
    while (p!=p->next)
    {
        for (int i = 1; i < m-1; i++)
        {
            p = p->next;
        }
        q = p->next;
        cout << q->data << "->";
        p->next = q->next;
        delete q; //删除第m个节点
        p = p->next;
    }
    cout << p->data;
    delete p;
}
/* 用于测试,遍历链表
bool YueList::TravList()
{
    Node* p = head->next;
    cout << "链表的元素为:";
    while (1)
    {
        cout << p->data << " ";
        p = p->next;
        if (p == head->next)
        {
            break;
        }
    }
    return true;
}
*/

int main()
{   
    YueList* L=new YueList();
    Node* p = NULL;
    int k = 0;
    cout << "输入元素的个数:";
    cin >> k;
    p = L->CreateCir(k);
    L->KillNode(p);
    //L->TravList();

}


输出结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值