写这篇文章时离学完列表已经很久了 最近真的是很懒。
数据结构这部分在刘汝佳的白书上的部分太少了,我一点要找个时间好好的看一下程杰的大话。
链表的优点是它强调的是相关元素之间的相对顺序,左和右。其实可以是个环状结构。
用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 //排除此困扰可以用临时变量的方法来解决 }
以上就是链表的初步应用