写这篇文章时离学完列表已经很久了 最近真的是很懒。
数据结构这部分在刘汝佳的白书上的部分太少了,我一点要找个时间好好的看一下程杰的大话。
链表的优点是它强调的是相关元素之间的相对顺序,左和右。其实可以是个环状结构。
用left 和 right两个数组分别记录某个元素相应左右的值,再用link函数进行元素之间的重新排序,抽取和添加。
下面以一个小球移动的题为例子来练习链表。
#include <stdio.h>
int left[10]={0,1,2,3,4},right[10]={2,3,4,5,0};
//为了方便,将下标为1的认为是1号小球的属性
void link(int X,int Y)//link函数是进行连接的
{
right[X]=Y;
left[Y]=X;
}
int main()
{
char type = 'L';
int x=2,y=4;//将2移到4的左或者右
link(left[2],right[2]);//把2从序列中取出 稍后在插入 取出的过程其实就是连接1,3 使 1.r=3 3.l=1
if(type=='L')
{
//把2插入到3和4中间
link(left[y],x);//3.r=2;2.l=3
link(x,y);//2.r=4 4.l=2
}else
{
//把2插入到4和5之间
int t = right[y];//如果不用t来做临时存储变量 则要十分慎重下面两行代码的顺序 因为会相互影响 上面的就是例子
link(y,x);
link(x,t);//此时t仍然是最初的right[y]
}
//链表的操作里,如果使用link函数 并附加参数时一定要考虑动态效应,否则会导致bug
//排除此困扰可以用临时变量的方法来解决
}
以上就是链表的初步应用