這種問題用鏈表做起來很簡單。下面我用雙向循環鏈表來實現它。可以參考壹下。
#包含“stdio.h”
#包含" stdlib.h "
#包含“malloc.h”
#定義NULL 0
結構列表
{
int數據;
char name[15];
結構列表* next
結構列表* prior
}列表;
結構列表* InitList(int n)
{//建立壹個雙向循環鏈表,以head為頭節點,數據從1開始到N,返回頭指針。
結構列表*head,*p,* q;
int I;
head =(struct List *)malloc(sizeof(struct List));
head->;數據= 1;
Printf("請輸入第1個孩子的名字:");
scanf("%s ",head-& gt;姓名);
head->;下壹個=頭;
head->;先驗=頭;
p =頭部;
for(I = 2;我& lt= n;i++)
{
q=(結構列表*)malloc(sizeof(結構列表));
q->;數據= I;
Printf("請輸入%d孩子的名字:",I);
scanf("%s ",q-& gt;姓名);
p->;next = q;
q->;先驗= p;
q->;下壹個=頭;
head->;先驗= q;
p = p-& gt;接下來;
}
回程頭;
}
void GetList(struct List *head,int w,int s)
{
結構列表*p,* q;
p =頭部;
int I;
for(I = 1;我& ltw;i++,p = p-& gt;下壹個);
for(;p->;下壹個!= p;i++,p = p-& gt;下壹個)
if((i-w+1)%s==0)
{
q = p->;先驗;
p->;下壹個-& gt;prior=p->先驗;
p->;先驗->;next = p-& gt;接下來;
printf("%s\n ",p-& gt;姓名);
免費(p);
p = q;
}
printf("%s\n ",p-& gt;姓名);
}
void main()
{
int n,w,s;
結構列表* head
做
{
系統(“cls”);
Printf("請輸入孩子總數:");
scanf("%d ",& ampn);
如果(n & gt0)head = InitList(n);//可以重復運行,直到n
否則退出(0);
Printf("請輸入最先報告的孩子的位置和間隔:");
scanf("%d,%d ",& ampw & amp;s);
GetList(head,w,s);
系統(“暫停”);
} while(1);
}