zoukankan      html  css  js  c++  java
  • 【算法学习笔记】07.数据结构基础 链表 初步练习

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

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

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

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


    以上就是链表的初步应用

  • 相关阅读:
    springboot项目启动成功后执行一段代码的两种方式
    ELK相关资料整理
    Golang指针解析
    Golang文件操作
    Go Channel介绍
    Go语言new和make的区别
    SpringBoot+AOP实现记录操作日志和异常日志,并保存到数据库
    【面试专栏】Java 阻塞队列
    Linux安装Jenkins并构建SpringBoot工程
    Linux安装git
  • 原文地址:https://www.cnblogs.com/yuchenlin/p/4379267.html
Copyright © 2011-2022 走看看