题目描述
某班上体育课,已经有部分同学排成一列纵队,对于后面来的同学,体育老师将他们随机的插入到某个位置,他的指令为“b K”或者“a K”:表示将后来的同学插入到第K个同学的前面或后面。
n,m<=10000,每个人的名字不超过10个字符。 前 后
输入
输入格式:
第一个一个整数n,表示已有n个同学拍成了一列纵队。接下来n行,每行给出一个同学的名字。
再接下来有m次操作,
每次操作为一行,由三个数据组成,第一个是字符串为该生的名字,第二个是一个字符,为b或者a,第三个为一个整数,表示k。如果k大于当前队列中的人数,则表示把该同学插入到队列的最后。
输出
输出:n+m行,第i行表示队列中第i个人的名字。
样例输入
3
kaka
lenma
Lily
5
roa a 1
meng b 3
caox b 4
hecong a 3
liuxiang b 2
样例输出
kaka
liuxiang
roa
meng
hecong
caox
lenma
Lily
-------------------------------------------------------------------------------------
涉及技术:链表的建立、插入。
链表的建立可以用结构体。结构体成员中,包含两大板块、数据域与指针域。
struct node{
int data; //data可以为任何类型,表数据域
node *next //表指针域
};
链表的读入,我们需要3个这样的结构体,并对他们进行初始化。
node *l, *h1, *h2;
l = h1 = new node; //new为新建一个节点,相当于动态数组
h2 = l; //保存开始的节点
以后,每向链表里添加一个元素,都需要new一次。
然后,便是读入。
scanf("%d", &l -> data);
h1 = new node;
l -> next = h1;
l = l -> next;
--------------------------------------
链表的插入方法如下:
1、新建一个节点;
2、将这个新节点的next指向上一个节点的next。
3、将上一个节点的next指向这个新节点。
4、放入数据。
h1 = new node;
h1 -> next = l -> next;
l -> next = h1;
--------------------------------------
注意读题!题目中说,只要插入的位置中输入的数超过队伍中的人数,不论前面输入的字符,直接放在最后。