约瑟夫环的链表C++实现

#include<iostream>
using namespace std;
typedef struct Node{
	int data;
	Node*next;
} NodeList;
NodeList* CreateList(int n)
{
	NodeList*p,*q,*head;
	int i=1;
	p= new NodeList();
	p->data=i;
	head=p;
	for( i=1;i<n;i++)
	{
		q=new NodeList();
		q->data=i+1;
		p->next=q;
		p=q;
	}
	p->next=head;
	return head;
	delete p;
	p=NULL;
	delete q;
	q=NULL;
}
void deletem(NodeList*L,int m)
{
	NodeList*p,*q,*temp;
	int j;
	p=L;
	while (p->next!=p)
	{
		for (int j=1;j<m;j++)
		{
			q=p;
			p=p->next;
		}
		cout<<p->data<<endl;
		temp=p;
		q->next=p->next;
		p=p->next;
		delete temp;
	}
	cout<<p->data<<endl;
}
int main()
{
	int n=10,m=2;
	NodeList*head1;
	head1=CreateList(n);
	deletem(head1,m);
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
约瑟夫环(Josephus Problem)是一个经典的算法问题,通常用于演示递归和循环的概念。在面向对象编程中,我们可以用C++实现一种类结构,比如一个`JosephusLinkedList`,它代表环中的节点,包含了下一个节点的引用以及一个计数器,模拟环中的淘汰过程。 以下是一个简单的C++实现约瑟夫环面向对象链表的步骤: ```cpp #include <iostream> class Node { public: int value; // 节点值 Node* next; // 指向下一个节点的指针 Node(int val) : value(val), next(nullptr) {} // 构造函数 }; class JosephusLinkedList { private: Node* head; // 链表头节点 int step; // 每次淘汰步长 public: JosephusLinkedList(int n, int k) : head(new Node(0)), step(k) { for (int i = 1; i < n; ++i) { Node* newNode = new Node(i); newNode->next = head; head = newNode; } head->next = head; // 形成环 } void eliminate() { if (!head || !head->next) return; // 链表为空或只有一个元素 Node* temp = head; for (int i = 0; i < step - 1; ++i) { temp = temp->next; } Node* victim = temp->next; // 计算淘汰节点 delete victim; eliminate(); // 递归调用,直到链表为空 } // 其他可能的方法,如遍历、添加/删除节点等 ~JosephusLinkedList() { Node* current = head; while (current) { Node* nextTemp = current->next; delete current; current = nextTemp; } } // 虚拟析构函数,确保正确释放内存 }; int main() { JosephusLinkedList list(10, 3); // 创建10个节点,步长为3 list.eliminate(); // 执行约瑟夫环算法 return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值