热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2.7.静态链表

图片均来自B站王道考研(侵删)1.静态链表:静态链表:分配一整片连续的内存空间,各个节点集中安置静态链表的每个节点,都包含了:数据元素、下一个结点的数组下标(游标),游标充当“指针




图片均来自B站王道考研(侵删)

请添加图片描述


1.静态链表:


  1. 静态链表:分配一整片连续的内存空间,各个节点集中安置
  2. 静态链表的每个节点,都包含了:数据元素、下一个结点的数组下标(游标),游标充当“指针”,单链表中每个节点存放的指针,只不过指针指明了具体的内存地址,而游标指明了下一个元素存放的数组下标
  3. 单链表中的表尾元素的*next指针指向NULL,而在静态链表中如果想表示这个结点是最后一个节点,则可以将它的游标设置为-1(即游标为-1表示已经到达表尾)
  4. 0号结点充当头结点
  5. 设每个元素的大小为4B,每个游标的大小也为4B(每个节点共8B),设起始地址为addr,则头结点指向的下一个结点地址为:addr+8*n(n为接下来的结点的数组下标)

2.用代码定义一个静态链表:

#define MaxSize 10 //静态链表的最大长度
struct Node{ //静态链表结构类型的定义
ElemType data; //存储的数据元素
int next; //下一个元素的数组下标
};
void testSLinkList{
struct Node a[MaxSize]; //数组a作为静态链表
//....
}
//书本代码:
#define MaxSize 10
typedef struct{
ElemType data;
int next;
}SLinkList[MaxSize];
//等价于:
#define MaxSize 10
struct Node{
ElemType data;
int next;
};
typedef struct Node SLinkList[MaxSize]; //可以用SLinkList去定义一个长度为MaxSize的Node型数组;
void testSLinkList{
SLinkList a;
//上面这一行等价于:struct Node a[MaxSize];
//......
}

3.简述基本操作的实现


  1. 初始化静态链表:把a[0]的next设置为-1,将其余的空闲结点的游标设置为-2,以便于后面寻找空余结点时进行判断

  2. 查找:从头结点出发挨个往后遍历节点

  3. 插入位序为i的结点

    ①找到一个空的结点,存入数据元素

    ②从头结点出发找到位序为i-1的结点

    ③修改新的结点的next

    ④修改i-1号结点的next

  4. 删除某个节点:

    ①从头结点出发找到前驱节点

    ②修改前驱节点的游标

    ③被删除的结点的游标设置为-2


4.总结:


  1. 静态链表:用数组的方式实现的链表

  2. 优点:增、删操作不需要大连的移动元素,只需要修改相关的结点的游标即可

  3. 缺点:不能随机存取,只能从头结点开始依次往后查找;容量固定不可变

  4. 适用场景:

    ①不支持指针的低级语言

    ②数据元素数量固定不变的场景(如操作系统的文件分配表FAT)



推荐阅读
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • LeetCode笔记:剑指Offer 41. 数据流中的中位数(Java、堆、优先队列、知识点)
    本文介绍了LeetCode剑指Offer 41题的解题思路和代码实现,主要涉及了Java中的优先队列和堆排序的知识点。优先队列是Queue接口的实现,可以对其中的元素进行排序,采用小顶堆的方式进行排序。本文还介绍了Java中queue的offer、poll、add、remove、element、peek等方法的区别和用法。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
author-avatar
温德军46867
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有