您的位置:首页 > 其它

移动小球链表实现

2015-12-07 17:21 281 查看
有一些小球,从左至右编号为1 2 3 ...... n

执行A 1 4后,小球1被移到4的左边

执行B 3 5后,小球3被移到5的右边

样例输入:

6 2
A 1 4
B 3 5

样例输出:

214536

#include<stdio.h>
const int N=50000;
struct Node
{
int order;
Node *left,*right;
}node
;

void CreateNode(int n)
{
int i;
for(i = 1;i <= n;i++)
{
node[i].order = i;
node[i].right = &node[i+1];
node[i+1].left= &node[i];
}
node[0].left = NULL;
node[0].right = &node[1];
node[1].left = &node[0];
node[i].right = NULL;
}
void A(int x,int y)
{
Node *p = &node[x],*q = &node[y];
p->right->left=p->left;
p->left->right=p->right;
p->right=q;
p->left=q->left;
q->left->right=p;
q->left=p;
}

void B(int x,int y)
{
Node *p = &node[x],*q = &node[y];
p->right->left = p->left;
p->left->right = p->right;
p->left = q;
p->right = q->right;
q->right->left = p;
q->right = p;
}
int main()
{
int n,m;
char cmd;
int x,y;
scanf("%d%d",&n,&m);
CreateNode(n);
while(m--)
{
scanf("%*c%c%d%d",&cmd,&x,&y);
if(cmd == 'A')
A(x,y);
if(cmd == 'B')
B(x,y);
}
Node *l = &node[0];
l = l->right;
while(l->right)
{
printf("%d",l->order);
l = l->right;
}
return 0;
}


在此感谢这篇博客给我的帮助http://blog.csdn.net/taotaotaotao910429/article/details/7831479
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: