首页 > 其他分享 >数据结构整理笔记(未完)

数据结构整理笔记(未完)

时间:2022-10-28 22:35:36浏览次数:52  
标签:node A1 笔记 next 链表 owner 整理 数据结构 结构

链表

  本质上是一个结构体指向下一个结构体,第一个结构体为链头,重点是指向下一个(next)结构体

  代码实现

  创建链表

struct Element   //链表元素
{
   char *name;    
   struct Element *next;      //名为next的结构体的指针
};    


struct List    //链头
{ 
   char *name;
   struct Element *next;      //名为next的结构体的指针        
};

//分别创建结构体对象L1,A1
struct List L1;
struct Element A1;

L1.name = "L1";
L1.next = NULL;    //此时没有链表元素,链头下一个结构体对象不存在

A1.name = "A1";
A1.next = NULL;    //A1的下一个结构体对象不存在

L1.next = &A1;    //链头的下一个结构体对象为A1

  删除链表

    当需要在List中删除A项,执行以下判断

    先令指针pre = NULL,p = A。进行循环判断。当p不为NULL和不为A时,pre=p,p=p->next,进下一次循环。当p为NULL时直接返回,表示List没有A项;当p为A时即找到需要删除的元素,则pre从指向p改成指向NULL,表示pre已是队尾,p踢出链表;当循环结束pre仍为NULL时表示A是链表第一个元素,则pre指向A后面的元素,即pre = p->next。

 

通用链表

  很容易看出来,当结构体不同时,链表操作函数需要跟着多一套出来。所以需要一个通用链表

  原理:

    之前的普通链表使用的是对应结构体的下一个结构体的指针next,next指向结构体的头部,于是next指针本身具有针对性(针对特定个结构体),如下图

  

 

 

  而通用链表,是先定义一个节点结构体node,嵌入每个结构体owner,类似于结构体身上带着一块牌子,通过节点结构体之间的联系找到对应的结构体,node结构体内部只有一个元素,就是下一个node的指针next。如此一来链表也一样使用node节点,无视结构体差异如下图

  

 

  那么,如何由node找出其owner?有以下三种方式

    1. node节点放在owner结构体的第一位,则node节点地址本身等于owner地址

    2. node节点放在owner结构体的固定偏移位,通过计算推断

    3. node节点内部设置一个指针,指向owner结构体,所以在初始化node节点时也需要一并传入owner地址

  而node所在的链表称之为其container

 

 

    

标签:node,A1,笔记,next,链表,owner,整理,数据结构,结构
From: https://www.cnblogs.com/toriyung/p/16797263.html

相关文章

  • 学习笔记——Tomcat(服务器)
    2022-10-28Tomcat(1)含义:Tomcat是一个使用广泛的JavaWeb服务器。(2)官方下载地址:https://tomcat.apache.org/使用8.0版本的就OK。(3)在使用Tomcat之前需要的准备工作:正......
  • C++ primer笔记 7.1 定义抽象数据类型
    7.1定义抽象数据类型structSales_data{std::stringbookNo;unsignedunits_sold=0;doublerevenue=0.0;std::stringisbn()const{returnboo......
  • yzh第六课(NEMU代码导读)笔记
    了解程序/工具行为的两种方法:1.看源码:可以得知每一处静态细节,但较繁琐2.看踪迹:容易了解运行动态行为,但不全面下手要选容易的方式:看踪迹啊啊 ......
  • 【笔记05】Javascript - 基本概念 - (函数递归)
    先看一个试题: 求n的阶乘通常,我们会写:functionfac(num){varres=1;for(vari=1;i<=num;i++){res*=i;}returnres;}观察阶乘可以发现两个特点:特点一:......
  • Git权威指南学习笔记(2)
    后面没啥特别好玩的了clone一个别人的项目gitclone<url><destnation>url可以为http、https、ssh、git、ftp、ftps等,clone过来的项目放在.git/refs/remotes/origin/......
  • 读书笔记
    继承与多态继承与方法重写override,什么是方法重写?由子类重新定义从父类中继承来的方法,将其改变或延伸。成员变量不存在重写这个说法。 publicvoidroam(){ ......
  • 读书笔记2
    接口与抽象类(深入多态)什么是抽象类?用abstract关键字声明抽象类,抽象类不能用new关键字进行实例化。在设计继承结构时,必须决定清楚什么类是抽象类,什么类是具体类。编译器......
  • CSS权威指南 读书笔记 第一章节
    CSS规则中,@import必须放在最前面,否则无效,但本人目前现在用的很少;CSS对规则间的空格并不敏感,规则内的也不敏感,所以在CSS语句中分隔模式可以是空格、tab符、换行,也可组合使......
  • [学习笔记] 差分约束系统
    解决问题解不等式方程。形如\(x_i\lex_j+w\)ps.等式可以化为两个不等式解决方法。相当于每条有向边松弛后的柿子。所以跑最短路即可。但有可能负权,而且要判无解(有......
  • Sass、Scss、Less笔记
    一、Sass和SCSS有什么区别? SCSS是Sass3引入新的语法,其语法完全兼容CSS3,并且继承了Sass的强大功能。Sass和SCSS其实是同一种东西,我们平时都称之为Sass,两者之......