33,311
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int ElemType;
typedef struct LNode
{
ElemType data;
ElemType num;
struct LNode *next;
}LNode,*LinkList;
////////////////////////////////////////////////////////////////////////////////
LinkList Create(int n)
{//创建带头结点n个结点的循环链表
int i;
LinkList L,p,q;
L=(LinkList)malloc(sizeof(LNode));//头结点
p=q=L;
for(i=1;i<=n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
printf("请输入报数人编号:");
scanf("%d",&p->data);
p->num=i;
q->next=p;
q=p;
}
q->next=L;//构成循环链表
return(L);
}
////////////////////////////////////////////////////////////////////////////////
LNode*Locate_LinkList(LinkList L,int x)
{
LNode*p=L->next;
while (p!=NULL&&p->data!=x)
p=p->next;
return p;
}
int main()
{
LNode*Locate_LinkList(LinkList L,int x);
int DeleteList(LinkList L ,int i);
LinkList L,p,temp;
int N,S,M,X,m,i,n;
printf("请输入报数人人数: ");
scanf("%d",&N);
L=Create(N);
for(p=L->next;p!=L;p=p->next)
printf("%d\t%d\t\n",p->data,p->next);
printf("请输入第一个报数人的编号:");
scanf("%d",&S);
printf("请输入间隔的人数:");
scanf("%d",&M);
printf("请输入剩余人数");
scanf("%d",&X);
m=Locate_LinkList(L,S)->num;
for(i=0;i<m-1;i++)//use指向第m-1个,为了从m位开始数
{
L=L->next;
}
while ((n-X)>=0) {
for (i = 1; i < M; i++)//掠过M-1个
L= L->next;
temp = L->next;//temp指向第k个
L->next = temp->next;//第k个从环中脱钩
printf("%d\n", temp->data);
free(temp);//释放第k个表元占用的空间
n--;
}
}