双向链表nyoj511

news/2024/10/18 7:44:28/

这道题做了一天了,开始用单向链表做,但是发现用了空表头就在中间处理的时候出现了问题,如果是没形成循环,就没办法记录两个指针;并且多次访问会超时,所以下午用了双向指针加结构体数组来做,ball[i]代表第i个球(类似)节点,然后前后两个指针形成环。在取出小球节点时只处理了一侧的指针,导致浪费了一下午去挑错误。

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define Max 10005
struct node
{node *left;node *right;int num;            //记录小球球号
} ball[Max];
void initial (int n)        //初始化球环
{for(int i=1; i<=n; i++){ball[i].num=i;if(i<n)             {ball[i].right=&ball[i+1];}else                //处理尾部,与头衔接{ball[i].right=&ball[1];}if(i==1)            //处理头部,与尾衔接{ball[i].left=&ball[n];}else{ball[i].left=&ball[i-1];}}
}
void movenode(char a,int x,int y)
{struct node *p,*q;p=&ball[x],q=&ball[y];p->left->right=p->right;    //取出小球的位置,前后小球指针互指p->right->left=p->left;if(a=='A'){q->left->right=p;   //在插入位置处理好插入小球与前后小球连接p->left=q->left;p->right=q;q->left=p;}else if(a=='B'){q->right->left=p;p->right=q->right;p->left=q;q->right=p;}
}
int findnode(int x,int y)       //找出目标小球的左右小球编号
{if(x)return ball[y].right->num;elsereturn ball[y].left->num;
}
int main()
{//freopen("I:aa.txt","r",stdin);//freopen("F:a.txt","w",stdout);int t;scanf("%d",&t);while(t--){int n,m;scanf("%d%d",&n,&m);initial(n);char a;int x,y;for(int i=0; i<m; i++){getchar();scanf("%c%d%d",&a,&x,&y);if(a=='A'||a=='B'){movenode(a,x,y);}else if(a=='Q'){int ans=findnode(x,y);printf("%d\n",ans);}}}return 0;
}




http://www.ppmy.cn/news/275142.html

相关文章

利用opencv3.0点击图片显示对应坐标(x,y)

(VS2013Opencv3.0) h文件&#xff1a; #include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv;void on_mouseDisplayC(int event, int x, int y, int flags, void* ustc); int DisplayCoordinates(IplImage* src1);CPP文件…

python 柱状图标出y值_Python——pyecharts数据可视化

关于项目 pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒,为了与 Python 进行对接,方便在 Python 中直接使用数据生成图,这个项目诞生了。 预热准备 进入命令行,安装pyecharts第三方库 …

sicktim571操作手册_SICK激光雷达LMS511测量数据说明

帧结构说明 LMS511的官方手册存在几个版本,在《Laser Measurement Systems of the LMS500 Product Family》的英文手册中,对单次(连续)获取测量结果的返回帧结构的说明中,容易误导用户(也可能是我没注意到细节)。 例如,对单次返回的帧结构,手册上是这样描述的。 单次获取对…

511遇见易语言学习数组变量

数组变量分为单维数组和多维数组&#xff0c;而二维数组是我们使用较多的数组&#xff0c;本节课结合画板&#xff0c;循环的嵌套&#xff0c;组件的复制讲解了数组变量&#xff0c;本节课有一定的难度。 511遇见易语言教程 易语言数组教程源码&#xff1a; .版本 2.程序集 窗…

SICK LMS511 利用串口数据采集

引言 应用LMS511或其它版本施克激光雷达时&#xff0c;可以通过SOPAS ET软件对LMS511进行设置&#xff0c;测量数据输出。更多的时候为了定制化产品&#xff0c;我们需要通过串口技术发送命令对LMS511进行设置和数据的输出。此时官方提供的Developers Guide手册对于开发者是重…

SICK激光雷达LMS511数据提取与分析

因工作需要&#xff0c;近期对SICK进行了数据提取与分析&#xff0c;将过程描述如下(最后有代码下载地址)&#xff1a; 提取&#xff1a;LMS511有网络接口&#xff0c;通过发送命令的方式即可提取数据&#xff0c;提取的数据可以保存到记事本中。具体网上搜一下即可。 推荐使…

华为android强刷系统下载地址,华为Y511官方rom固件刷机包下载_Y511原版系统强刷升级包...

在这里来给大家分享一下华为Y511的官方rom固件包&#xff0c;这些固件包都是官方原版的&#xff0c;虽说现在官方的包不是很多&#xff0c;不过以后有新的发布会一并更新上来的&#xff0c;如果有需要的可以下载下来备用了&#xff0c;同时这些固件包还可以用来救砖用的。 提示…

如和使用matlab进行求导 ,入门级教程

文章目录 问题如图所示运行结果如图代码分析完整代码完结撒花 问题如图所示 运行结果如图 代码分析 % 定义样本数量 n 500;这行代码定义了一个变量 n&#xff0c;它代表样本数量。这个变量在后面的代码中会被用到。 % 将 s 和 z 取值范围分成子区间的个数 num_intervals 40…