落絮飞雁的个人网站

顺流而下,把梦做完

一个简单的约瑟夫环代码

动态链表的课后作业。直接上代码:

// My accepted code of Q2
#include 
#include 
#include 
using namespace std;

typedef struct _LinkNode //开链表
{
	int value;
	struct _LinkNode* next;
}LinkNode, *LinkNodePtr;

LinkNodePtr createCycle(int total)
{
	int index = 1;
	LinkNodePtr head = NULL, curr = NULL, prev = NULL;//链表初始化
	head = (LinkNodePtr)malloc(sizeof(LinkNode));
	head->value = index;
	prev = head;

	while (--total > 0)//判断满链表?
	{
		curr = (LinkNodePtr)malloc(sizeof(LinkNode));
		curr->value = ++index;
		prev->next = curr;
		prev = curr;
	}
	curr->next = head;
	return head;
}

void run(int total, int tag)
{
	LinkNodePtr node = createCycle(total);
	LinkNodePtr prev = NULL;
	int start = 1;
	int index = start;
	while (node && node->next)
	{
		if (index == tag)
		{
			printf("n%d", node->value);
			if (tag == start)
			{
				prev = node->next;
				node->next = NULL;
				node = prev;
			}
			else
			{
				prev->next = node->next;
				node->next = NULL;
				node = prev->next;
			}
			index = start;
		}
		else
		{
			prev = node;
			node = node->next;
			index++;
		}
	}
}
int main(int argc, char* argv[])
{
	int peo;
	while (1)
	{
		cout << "请输入初始序号,退出按1么么哒~" << endl;
		cin >> peo;
		if (peo == 1)
			break;
		else if (peo < 1)
		{
			cout << "输入不合法,必须要输入大于一的正整数呀~" << endl;
			continue;
		}
		else
		{
			run(peo, 999999);
			printf("n");
		}
	}
	return 0;
}

原文标题:一个简单的约瑟夫环代码|落絮飞雁的个人网站
原文链接:https://www.luoxufeiyan.com/2015/04/20/myjosephusproblem/
授权协议:创作共用 署名-非商业性使用 2.5 中国大陆
除注明外,本站文章均为原创;转载时请保留上述链接。
  1. 老牛说道:

    好羡慕 还能在学校过神仙般的日子