一、题目详情
题目描述
小王子有一天迷上了排队的游戏,桌子上有标号为 1−10 的 10 个玩具,现在小王子将他们排成一列,可小王子还是太小了,他不确定他到底想把那个玩具摆在哪里,直到最后才能排成一条直线,求玩具的编号。已知他排了 M 次,每次都是选取标号为 X 个放到最前面,求每次排完后玩具的编号序列。
输入描述
第一行是一个整数 M,表示小王子排玩具的次数。
随后 M 行每行包含一个整数 X,表示小王子要把编号为 X 的玩具放在最前面。输出描述
共 M 行,第 i 行输出小王子第 i 次排完序后玩具的编号序列。
二、代码的编写
#include <stdio.h>
#include <stdlib.h>
typedef struct line
{
int dig;
struct line *next;
} L; //创建单链表的类型
L* fun(int num,L *header)
{
int i;
L*p=header->next;
L*pre=header;
for( i=1;i<=10;i++)
{
if(p->dig==num){
pre->next=p->next;
p->next=header->next;
header->next=p;
return header;
}
pre=pre->next;
p=p->next;
}
} //遍历链表找出被挑选的序号并放在开头
void print(L*header)
{
L*p=header->next;
while(p!=NULL)
{
printf("%d ",p->dig);
p=p->next;
}
} //遍历并输出重新排序后的链表
int main( )
{
int count,num,i;
L*p,*r,*head;
head=(L*)malloc(sizeof(int));
head->next=NULL;
r=head;
for( i=1;i<=10;i++)
{
p=(L*)malloc(sizeof(int));
p->dig=i;
p->next=r->next;
r->next=p;r=p;
} //创建单链表
scanf("%d",&count);
for( i=1;i<=count;i++)
{
scanf("%d",&num);
head=fun(num,head);
print(head);
printf("\n");
} //调用函数排序并输出
return 0;
}
测试结果图
三、结束语
若发现错误或遇到问题,欢迎到评论区留言,大家一起解决问题,共同进步,不断提高!!