问题补充说明:想在这个程序的基础上加上每个人的性别怎么加#include typedef struct LNode { int data;//密码int i;//编号struct LNode *next; }LNode, *LinkList; int CreateList(LinkList &L,int a[],int n) { LinkList s,r;int i; r=L; for(i=1;i<=n;i++) { s=(LinkList )malloc(sizeof(LNode)); s->data=a[i]; s->i=i; if(i==1) { L=s; s->next=s; r=s;//尾指针指向当前元素 } else { s->next=r->next; r->next=s; r=s;} } return 1; } int ListDelete_L(LNode *L) { if(L->next==L)//只剩一个结点{ printf("%d\n",L->i); free(L); return 0; } LNode *p; p=L->next;//p指向要删除元素的下一个结点while(p->next!=L) p=p->next; LNode *q=L;//q指向需要被删除的元素结点int e=L->i; p->next=L->next; free(q); printf("%d ",e); return 1; } int FindNode(LinkList L,int x) { LinkList p=L; LinkList q; for(int i=1;inext; q=p->next;//下一次循环的起始位置x=p->data; if(ListDelete_L(p)) FindNode(q,x); return p->i; } int main() { int n,m; LinkList L; printf("请输入人数和初始密码:"); scanf("%d %d",&n,&m); if(n<0||m<0) { printf("输入的人数和初始密码不能为负数!\n"); return 0; } int a[100]; printf("请输入每个人的密码:"); for(int i=1;i<=n;i++) scanf("%d",&a[i]); if(CreateList(L,a,n)) { printf("\n"); printf("正确的出列顺序为:"); FindNode(L,m); printf("\n"); } return 0; }
/*约瑟夫环问题—里油装仅于煤怕—链表模拟*/
#i市nclude
#include
typedefstructnode
{
intid;
structnode*next;
}node;
intmain()
{
intm,n,i;
node*p,*q,*head;
while(~scanf("%d%d",&m,&n))
{
//创建含n个节点的循环链表,初始化编号
head=(no做移de*)malloc(sizeof(node段效目经推术阳湖才讨));
head->id=1;
q=head;
for(i刘刻施置局亚婷婷路测=2;i<=n;++i)
{
p=(node*)malloc(sizeof(node));
p->i粮支个角流输格非护d=i;
q->next=p;
q=p;
}
q->next=head;
//模拟退出过程
i=1;
p=head;
while(p->next!=p)
{
q=p;
p=p->next;
++i;
i家工仍飞息门f(i==m)//delete(p);i告简审引案口尽已势台=1;
{
q->ne并行急干房洋田xt=p->next;
free(p);
p=q->next;
i=1;
}
}
//打印剩余节点的校检室少超圆神外封损让编号
printf("%d\n件叫担几早集升起皇针低",p->id);
free(p);
}
return相活乐福仅奏适各己0;
}