新手做题,求点拨。
数据结构与算法实验题 Who is behind
实验任务
开学了,有 N 个新生需要排成一列。这 N 个新生编号从 1 到 N,为了排队方便,按编号
从 1 到 N 顺序入队伍,起始队伍为空,每个人进队伍的选择有两种,一种是直接排在当前队
伍的最前面,一种是排在当前队伍最末端。现在想知道所有人都入队伍之后每人的后面是谁。
数据输入
输入第一行为一个正整数 N (2 < N < 10000), 表示有 N 个人,编号为 1 到 N。。
接下来 1 行,有 N 个整数,0 或者 1。第 i 个数表示第 i 个同学是排在当前队伍最前端
还是在最末端。(0 表示排在当前队伍最前端,1 表示排在当前队伍最末端)
数据输出
输出 N 行每行一个整数。第 i 行的整数表示全部人都入队伍后第 i 个同学后面的同学的
编号,如果后面没人的同学则输出 -1。
输入示例
输出示例
6
0
1
0
1
0
1
2
4
1
6
3
-1
大概知道是用队列,可是老想不出该如何表示,求小小点拨一下 算法 数据 数据结构
[解决办法]
楼主顺便帮俺看看!
http://bbs.csdn.net/topics/390606094
[解决办法]
#include<stdio.h>
#include<stdlib.h>
typedef struct person{
int id;
struct person * next;
}Person;
int main(){
Person * head=NULL,* tail=NULL;
Person * p;
int pcount;//队列人数
int i,j;
int flag;//入队方向标志
int rid;
printf("输入人数:");
scanf("%d",&pcount);
printf("入队方式:\n");
/*读取入队*/
for(i=0;i<pcount;i++){
scanf("%d",&flag);
p=(Person *)malloc(sizeof(Person));//动态分配
p->id=i+1;
p->next=NULL;
if(head==NULL){
head=p;
tail=p;
}
else{
switch(flag){
case 1:
tail->next=p;
tail=tail->next;
break;
case 0:
p->next=head;
head=p;
break;
default:
//非法输入处理
break;
}
}
}
printf("结果\n");
/*打印结果*/
for(j=1;j<=pcount;j++){
//查找id,打印next
rid=getNextId(head,j);
printf("%d\n",rid);
}
}
/*在队列中查找,返回后边人的id*/
int getNextId(Person * head,int id){
Person * p;
p=head;
do{
if(id==p->id){
if(p->next==NULL)return -1;
return p->next->id; //?
}
p=p->next;
}while(p!=NULL);
}