出圈游戏附加:每个人都有着自己对应的数值,此人出圈,按照他的数值来进行下一次的出圈循环。
错误:Print函数没有被调用
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 5
typedef struct data
{
int password;//存入每个人对应的密码,按照密码数值进行出圈
int order;//每个人的序号
struct data *next;
}LNode,*LinkList;
LNode *InitList(LNode *L)
{
LinkList p,q;
int i,c=0;
p = q = L;
for(i=1;i<=5;i++)
{
p = (LNode*)malloc(sizeof(LNode));
p->next=NULL;
c++;
if(c==1) L = q = p;//定义首元结点为头节点
else
{
q->next = p;
q = q->next;
}
}
p->next=L; //单循环链表,最后一个节点指向头指针。
return L;
}
void InputElem(LNode *L)
{
LNode *p;
p = L;
int i;
for(i=1;i<=MaxSize;i++)
{
printf("请输入第%d个人的密码,密码上限为5:",i);
scanf("%d",&p->password);
p->order = i;
p = p->next;
}
}
LNode *DeleteElem(LNode *L,LNode *p) //传入要删除当前节点的指针
{
LNode *q,*n;
int j;
q = L;
while(1)
{
if(q->next==p)
{
n=q;
q->next=p->next;
p->next=NULL;
break;
}
q=q->next;
}
return n; //返回删除节点的上一个节点
}
void Print(LNode *L,int n)
{
printf("%d",&n);
LNode *p;
int t,i=1,j,number;
p = L;
if(n>5||n<0)
{
printf("输入错误\n");
exit(0);
}
for(i=1;i<=n;i++)
{
if(i==n)
{
number=p->order;
printf("%d ",number);
n = p->password;//存放他的密码,用于进行下一轮出圈
p=DeleteElem(L,p);//p为当前要删除的指针,返回值为指针的前一个节点。
i=0;//重新赋初值,经历这一轮i++后为1
}
p=p->next;
}
}
int main()
{
LNode *L,*p;
int i=0,n;
L = InitList(L);
p=L;
InputElem(L);
printf("请输入一个数字,开始退圈游戏,数字上限为5:\n");
scanf("%d",&n);
Print(L,n);
return 0;
}