一个数据结构的问题
- 提问者网友:寂寞撕碎了回忆
- 2021-07-19 08:29
- 五星知识达人网友:woshuo
- 2021-07-19 09:08
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef struct node
{
int num;
struct node *next;
}Node , * LinkList;
void InitList(LinkList *L); //初始化函数
void CreateList(LinkList L,int n);//创建链表函数
void YsfList(LinkList L); //约瑟夫问题
int main()
{
LinkList L;
int n = 0;
InitList(&L);
printf("\n请输入人数:");
scanf("%d",&n);
CreateList(L,n);
YsfList(L);
return 0;
}
void InitList(LinkList *L)
{
*L = (LinkList)malloc(sizeof(Node));
(*L)->next = (*L); //头指针初始化
}
void YsfList(LinkList L)
{
Node * p ,* q ,* pre;
int m,i = 0;
printf("\n请输入m的值: m = ");
scanf("%d",&m);
p = L;
while(p->next != p)
{
pre = p; //pre记录p的前驱以便删除p
p = p->next;
if(p == L) //头结点不能计数
{
pre = p;
p = p->next;
}
i ++;
if(i == m) //退出条件
{
printf("%d ",p->num);
pre->next = p->next; //删除退出结点
q = p;
free(q);
p = pre;
i = 0; //计数还原,从新计数
}
}
printf("\n\n\t\t 结束! \n");
}
void CreateList(LinkList L,int n)
{
Node * r, * s;
int i = 0;
r = L;
while(i < n)
{
s = (LinkList) malloc (sizeof(Node));
s->num = i + 1;
r->next = s; //尾插法创建链表
r = s;
i++;
}
r->next = L;
}
- 1楼网友:愁杀梦里人
- 2021-07-19 10:19