#include<stdio.h>
#include<malloc.h>
#define LPRO sizeof(struct Pro)
struct Pro *create(int x); // 建表,x表示总人数
struct Pro *print(struct Pro *head, int x); // 打印目标节点,传入头指针和总人数
struct Pro *delet(struct Pro *pre, struct Pro *p); // 删除目标节点,传入目标节点前驱和目标节点
struct Pro
{
int num;
struct Pro *next;
};
int main()
{
struct Pro *head;
head = create(41); // 建立有41个节点的单链表
print(head, 41); // 打印目标节点
return 0;
}
struct Pro *create(int x) // 建表,x表示总人数
{
int i = x;
struct Pro *head, *p, *tail;
head = (struct Pro *)malloc(LPRO);
head = NULL;
do
{
p = (struct Pro *)malloc(LPRO);
p->num = i;
if(i == x)
{
tail = p;
}
i--;
p->next = head;
head = p;
}while(i);
tail->next = p;
return tail;
}
struct Pro *print(struct Pro *head, int x) // 打印目标节点,传入头指针和总人数
{
int i;
struct Pro *p, *pre;
p = head;
while(x)
{
for(i = 0; i < 3; i++) // 寻找目标节点
{
pre = p;
p = p->next;
}
printf("%-4d", p->num);
p = delet(pre, p); // 删除目标节点
x--;
}
return 0;
}
struct Pro *delet(struct Pro *pre, struct Pro *p) // 删除目标节点,传入目标节点前驱和目标节点
{
pre->next = p->next;
free(p);
return pre;
}
C语言用链表解决约瑟夫问题
最新推荐文章于 2024-07-18 00:37:38 发布