【算法学习笔记】07.数据结构基础 链表 初步练习

时间:2022-03-31 10:24:09

写这篇文章时离学完列表已经很久了 最近真的是很懒。

数据结构这部分在刘汝佳的白书上的部分太少了,我一点要找个时间好好的看一下程杰的大话。

链表的优点是它强调的是相关元素之间的相对顺序,左和右。其实可以是个环状结构。

用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 
	//排除此困扰可以用临时变量的方法来解决 
}


以上就是链表的初步应用