单链表实现约瑟夫问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单链表解决约瑟夫问题

代码实现:

#include

#include

typedef int DataType;

typedef struct Node

{

DataType data;

struct Node *next;

}ListNode, *LinkList;

LinkList CreateCycList(int n){

LinkList head = NULL;

ListNode *s, *r;

int i;

for (i = 1; i <= n; i++)

{

s = (ListNode*)malloc(sizeof(ListNode));

s->data = i;

s->next = NULL;

if (head == NULL)

head = s;

else

r->next = s;

r = s;

}

r->next = head;

return head;

}

void DisplayCycList(LinkList head){

ListNode *p;

p = head;

if (p == NULL)

{

printf("该链表是空表");

return;

}

while (p->next != head)

{

printf("%2d", p->data);

p = p->next;

}

printf("%2d\n", p->data);

}

void Josephus(LinkList head, int n, int m, int k) {

ListNode *p, *q;

int i;

p = head;

for (i = 1; i

{

q = p;

p = p->next;

}

while (p->next != p)

{

for (i = 1; i

{

q = p;

p = p->next;

}

q->next = p->next;

printf("%2d", p->data);

free(p);

p = q->next;

}

printf("%2d\n", p->data);

}

void main(){

LinkList h;

int n, k, m;

printf("输入环中人的个数,n=");

scanf("%d", &n);

printf("输入开始报数的序号,k=");

scanf("%d", &k);

printf("报数为m的人出列,m=");

scanf("%d", &m);

h = CreateCycList(n);

Josephus(h, n, m, k);

}

相关文档
最新文档