写在前面的一些话:这只是个人学习王道数据结构的代码笔记,仅供参考,如果有错误请友好的指出,谢谢!!!

文章目录

  • 一、静态链表
    • 1、定义一个静态链表
    • 2、初始化一个静态链表
  • 总结

一、静态链表

1、定义一个静态链表

借助数组实现链式存储结构,和链表中指针不同的是,静态链表的指针是用游标代替的,存放的是下一个结点在数组中的相对位置
定义一个静态链表的代码如下:

#define MaxSize 10 //静态链表的最大长度
typedef struct {   //静态链表结构类型的定义int data;      //存储数据元素int next;      //下一个数据元素的数组下表(游标)
}SLinkList[MaxSize];

以上代码等同于如下

#define MaxSize 10
struct Node{int data;int next;
};
typedef struct Node SLinkList[MaxSize];

2、初始化一个静态链表

初始化一个静态链表:
把a[0]的next设成-1,用-1来标识最后一个结点,a[0]也是头结点,不存放数据
把其他结点的next设置成一个特殊的值来表示结点空闲,这里我设置成-2

代码如下:

#include <iostream>
using namespace std;
#define MaxSize 10//静态链表的最大长度
typedef struct {//静态链表结构类型的定义int data;//存储数据元素int next;//下一个数据元素的数组下表(游标)
}SLinkList[MaxSize];
bool InitSLinkList(SLinkList &L){//初始化一个静态链表L[0].next=-1;//用-1来标识最后一个结点for(int i=1;i<10;i++){L[i].next=-2;//用-2表示该结点空闲}return true;
}
bool SLinklistInsert(SLinkList &L,int i,int e){//在数组第i个位置插入元素eif(i<0 || i>9)return false;//i值不合法if(L[i].next!=-2)return false;//i不是空闲结点int j=0;while(L[j].next!=-1)//循环找到最后一个结点j=L[j].next;L[j].next=i;//修改原来最后一个结点的游标为iL[i].data=e;L[i].next=-1;//把新结点设成最后一个结点return true;
}
void PrintSLinkList(SLinkList L){//打印静态链表的数据cout<<"静态链表的数据元素是:"<<endl;int i=0;while(L[i].next!=-1){i=L[i].next;cout<<L[i].data<<"  ";}cout<<endl;cout<<"数组中的存储数据是:"<<endl;for(i=0;i<10;i++){if(L[i].next==-2||i==0)continue;cout<<"L["<<i<<"]="<<L[i].data<<"  ";}cout<<endl;
}
int main(){SLinkList L;InitSLinkList(L);//初始化一个静态链表SLinklistInsert(L,3,1);//在数组的第三个位置插入数据元素1SLinklistInsert(L,1,2);//在数组的第一个位置插入数据元素2SLinklistInsert(L,4,3);//在数组的第一个位置插入数据元素3PrintSLinkList(L);//打印静态链表return 0;
}

代码运行结果:

总结

静态链表和链表一样,逻辑上相邻的元素物理位置上不一定相邻,不同的是,前者使用游标来表示下一个元素的位置,后者使用指针指向下一个元素的地址。

静态链表(学习笔记)相关推荐

  1. STA静态时序分析——学习笔记

    STA静态时序分析--学习笔记 静态时序分析简介及基本知识 PT流程以及分步骤讲解 2.1 设计STA环境 2.2 指定STA库文件 2.3 读取Netlist文件 2.4 读取SPEF文件 2.5 ...

  2. 数据结构与算法-链表学习笔记

    数据结构与算法-链表学习笔记 链表的概念 链表是有序的列表. 链表是以节点的方式来存储,是链式存储,它在内存中并不是一定是连续的. 每个节点包含 data 域:存储数据, next 域:指向下一个节点 ...

  3. 静态链表相关算法学习

    大话数据结构学习笔记-静态链表学习 c语言真是好东西,它具有指针能力,使得它可以非常容易地操作内存中的地址和数据,这比其他高级语言更加灵活方便. 后来的面向对象的语言,如java.C#等,虽然不使用指 ...

  4. 梓益C语言学习笔记之链表&动态内存&文件

    梓益C语言学习笔记之链表&动态内存&文件 一.定义: 链表是一种物理存储上非连续,通过指针链接次序,实现的一种线性存储结构. 二.特点: 链表由一系列节点(链表中每一个元素称为节点)组 ...

  5. 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)

    线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...

  6. RT-Thread 静态内存管理(学习笔记)

    本文参考自[野火EmbedFire]<RT-Thread内核实现与应用开发实战--基于STM32>,仅作为个人学习笔记.更详细的内容和步骤请查看原文(可到野火资料下载中心下载) 文章目录 ...

  7. SpringBoot学习笔记(3):静态资源处理

    SpringBoot学习笔记(3):静态资源处理 在web开发中,静态资源的访问是必不可少的,如:Html.图片.js.css 等资源的访问. Spring Boot 对静态资源访问提供了很好的支持, ...

  8. OpenCV学习笔记(三十一)——让demo在他人电脑跑起来 OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 OpenCV学习笔记(三十三)——用haar特征训练自己

    OpenCV学习笔记(三十一)--让demo在他人电脑跑起来 这一节的内容感觉比较土鳖.这从来就是一个老生常谈的问题.学MFC的时候就知道这个事情了,那时候记得老师强调多次,如果写的demo想在人家那 ...

  9. Windows进程与线程学习笔记(四)—— 等待链表调度链表

    Windows进程与线程学习笔记(四)-- 等待链表&调度链表 要点回顾 33个链表 等待链表 实验:分析等待链表中的线程所属的进程 第一步:查看所属线程结构体: 第二步:查看所属进程结构体 ...

最新文章

  1. apk反编译工具-apktool
  2. 同是iPad退差价却不同?
  3. cad打开图纸流程图_如何一键打开超大CAD图纸,进行CAD快速看图?
  4. 【深度学习的数学】交叉熵公式如何推导?
  5. lisp精要(2)-基础(1)
  6. java中的native关键字有什么作用?(java本地方法)
  7. nginx开发(二)配置mp4文件在线播放
  8. 【保姆级教程】使用python实现SIR模型(包含数据集的制作与导入及最终结果的可视化)
  9. Linux网络编程|UDP编程实例
  10. 洛谷·[HNOI2015]落忆枫音
  11. 安卓温升thermal介绍
  12. 数据预处理-Excel 两列合并为一列中间加空格
  13. 云讯健身管理系统-9
  14. op 反馈电阻并联二极管
  15. git master、origin master 与 origin/master 的区别
  16. a标签带参页面跳转并在跳转页面接收参数
  17. 【空间规划符号库】国土空间规划_制图规范+制图样式
  18. 【echarts】echarts绘制关系图
  19. 数据结构课程设计—同学录管理系统(c语言)
  20. 利用pandas合并excel文件

热门文章

  1. java 访问linux 根目录_paip兼容windows与linux的java类根目录路径的方法 | 学步园
  2. span标签中实现换行
  3. MySQL如何创建用户
  4. [附源码]Nodejs计算机毕业设计面向大学生的党建管理系统Express(程序+LW)
  5. 管理的价值 | 陆奇推崇的洛克菲勒原则 (Rockefeller Habits)与每日站会、回顾会、OKR、价值观、团队...
  6. 集合(Collection、Map)
  7. Word写保护怎么去掉
  8. 倪光南:建议政府停止采购和使用“ Win10 政府版”
  9. 磊科路由器后门蜜罐捕获的事件分布情况
  10. AppStore 审核中文版 --- 程序员必看