7-4 可怕的素质
全屏浏览
切换布局
作者 程序设计课题组
单位 福州大学
题目
亚克星球上的人的素质跟我们福大人比起来,可以说是一个天上,一个地下了。他们去食堂吃饭的时候,很多人都不好好的排队,而是排在某个熟人的后面,或者直接就插到队伍的最前面。这让食堂的工作人员很是恼火。
输入格式:
第一行包含一个整数n(0<n<1000),表示有n个亚克星球上的人去食堂吃饭。
接下来n行,每行1个整数x,表示第i( i从1~n )个人排在了x的后面,当x为0时,表示第i个人排在了最前面。
输出格式:
输出仅一行,包括n个数,以空格作为分隔符,最后一个数的后面没有空格。表示这n个人最后是排成了怎样的队伍。
输入样例:
3
0
0
2
输出样例:
2 3 1
解答:
#include <stdio.h>
#include <stdlib.h>
typedef struct note
{
struct note *fwd;
int x;
} note;
void insert(int i, int d);
void prilian();
note head = {NULL, 0};
int main()
{
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
int d;
scanf("%d", &d);
insert(i, d);
}
prilian();
}
void insert(int i, int d)
{
//两个指针,中间为插入点
note *p = &head;
note *q = head.fwd;
// 分配要插入的节点
note *m = malloc(sizeof(note));
m->x = i;
// 找到插入位置
while (q != NULL)
{
if (p->x == d) break;
p = q;
q = q->fwd;
}
// 插入
p->fwd = m;
m->fwd = q;
}
//打印链表的函数
void prilian()
{
note *t = &head;
t = t->fwd;//过掉头节点
while (t != NULL)
{
printf("%d", t->x);
t = t->fwd;
if(t!=NULL) printf(" ");
}
}