首页 > 其他分享 >严蔚敏《数据结构》存储结构

严蔚敏《数据结构》存储结构

时间:2024-01-05 17:56:04浏览次数:24  
标签:存储 struct int typedef 链表 严蔚敏 数据结构 data

目录

1.单链表
2.双向链表
3.带头结点的链表
4.顺序栈
5.单链队列
6.循环队列
7.广义表头尾链表存储
8.广义表的扩展线性链表存储
9.二叉树二叉链表存储表示
10.树的双亲表示法
11.树的孩子链表存储表示(孩子表示法)
12.树的孩子兄弟表示法(二叉树表示法)
13.二叉树的二叉线索存储表示
14.哈夫曼树和哈夫曼编码的存储表示
15.图的邻接矩阵
16.图的邻接表
17.有向图的十字链表
18.无向图的邻接多重表
19.二叉排序树
20.B-树

1.单链表

typedef struct LNode {
    ElemType data;
    struct LNode *next;
} LNode, *LinkList;

2.双向链表

typedef struct DuLNode {
    ElemType data;
    struct DuLNode *prior;
    struct DuLNode *next;
} DuLNode, *DuLinkList;

3.带头结点的链表

typedef struct LNode {
    ElemType data;
    struct LNode *next;
} *Link;

typedef struct {
    Link head, tail;
    int len;
} LinkList;

4.顺序栈

typedef struct {
    SElemType *base;
    SElemType *top;
    int stacksize;
} SqStack;

5.单链队列

typedef struct QNode {
    QuElemType data;
    struct QNode next;
} QNode, *QueuePtr;

typedef struct {
    QueuePtr front; //队头指针
    QueuePtr rear; //队尾指针
} LinkQueue;

6.循环队列

typedef struct {
    QElemType *base;
    int front;
    int rear;
} SqQueue;

7.广义表头尾链表存储

typedef enum {ATOM, LIST} ElemTag;
typedef struct GLNode {
    ElemTag tag;
    union {
        AtomType atom;
        struct {
            struct GLNode *hp, *tp;
        } ptr; //ptr.hp, ptr.tp 分别表示子表的表头,表尾
    };
} *GLsit;

8.广义表的扩展线性链表存储

typedef enum {ATOM, LIST} ElemTag;
typedef struct GLNode {
    ElemTag tag;
    union {
        AtomType atom;
        struct GLNode *hp;
    };
    struct GLNode *tp; //相当于next,指向下一个元素节点
} *GLsit;

9.二叉树二叉链表存储表示

typedef struct BiTNode {
    TElemType data;
    struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;

10.树的双亲表示法

typedef struct PTNode {
    TElemType data;
    int parent;
} PTNode;

typedef struct {
    PTNode node[MAX_TREE_SIZE];
    int root, n; //根节点位置和节点数
} PTree;

11.树的孩子链表存储表示(孩子表示法)

typedef struct CTNode { //孩子节点
    int child;
    struct CTNode *next;
} *ChildPtr;
typedef struct {
    TElemType data;
    ChildPtr firstchild; //孩子链表头指针
} CTBox;
typedef struct {
    CTBox node[MAX_TREE_SIZE];
    int root, n;//根节点位置和节点数
} CTree;

12.树的孩子兄弟表示法(二叉树表示法)

typedef struct CSTNode {
    TElemType data;
    struct CSTNode *firstchild, *nextsibling;
} CSNode, *CSTree;

13.二叉树的二叉线索存储表示

typedef enum {Link, Thread} PointerTag;
typedef struct BiThrNode {
    TElemType data;
    struct BiThrNode *lchild, *rchild;
    PointerTag LTag, RTag;
} BiThrNode, *BiThrTree;

14.哈夫曼树和哈夫曼编码的存储表示

typedef struct {
    unsigned int weight;
    unsigned int parent, lchild, rchild;
} HTNode, *HuffmanTree; //哈夫曼树
typedef char **HuffmanCode; //哈夫曼编码表

15.图的邻接矩阵

typedef struct ArcCell {
    VRType adj;
    InfoType *info;
} ArcCell, AdjMatrix[MAX_VERTEX_SIZE][MAX_VERTEX_SIZE];
typedef struct {
    VertexType vexs[MAX_VERTEX_SIZE];
    AdjMatrix arcs;
    int vexnum, arcnum;
} MGraph;

16. 图的邻接表

typedef struct ArcNode {
    int adjvex; //该边所指顶点
    struct ArcNode *nextarc; //下一条边
    InfoType *info; //边的信息
} ArcNode;
typedef struct VNode {
    VertexType data; //顶点信息
    ArcNode *firstarc; //该顶点发出的第一条边
} VNode, AdjList[MAX_VERTEX_SIZE];
typedef struct {
    AdjList vertices;
    int vexnum, arcnum;
} ALGraph;

17. 有向图的十字链表

typedef struct ArcBox {
    int headvex, tailvex; //该边的头尾顶点
    struct ArcBox *hlink, *tlink; //头顶点相同的下一条边和尾相同的下一条边
    InfoType *info;
} ArcBox;
typedef struct VexNode {
    VertexType data;
    ArcBox *firstin, *firstout; //该点的第一条入边和出边
} VexNode;
typedef struct {
    VexNode xlist[MAX_VERTEX_SIZE]; //表头
    int vexnum, arcnum;
} OLGraph;

18.无向图的邻接多重表

typedef struct EBox {
    VisitIf mark; //访问标记
    int ivex, jvex; //该边的两个顶点
    struct EBox *ilink, *jlink; //指向依附这两个顶点的下一条边
    InfoType *info;
} EBox;
typedef struct VexBox {
    VertexType data;
    EBox *firstedge; //第一条依附该顶点的边
} VexBox;
typedef struct {
    VexBox adjmulist[MAX_VERTEX_SIZE];
    int vexnum, edgenum;
} AMLGraph;

19.二叉排序树

typedef struct BSTNode {
    ElemType data;
    int bf; //平衡因子
    struct BSTNode *lchild, *rchild;
} BSTNode, *BSTree;

20.B-树

#define m 3 //B-树的阶
typedef struct BTNode {
    int keynum; //节点关键字个数
    struct BTNode *parent; //双亲结点
    KeyType key[m + 1]; //关键字[1, ..., m]
    struct BTNode *ptr[m + 1]; //子树指针
    Record *recptr[m + 1]; //记录指针向量
} BTNode, *BTree;
typedef struct { 
    BTNode *pt; //指向找到的节点
    int i; //结果的关键字序号 1...m
    int tag; //1:查找成功,0:查找失败
} Result; //查找结果类型

标签:存储,struct,int,typedef,链表,严蔚敏,数据结构,data
From: https://www.cnblogs.com/mcggvc/p/17947767

相关文章

  • 视频智能分析/云存储平台EasyCVR接入海康SDK,通道名称未自动更新该如何解决?
    视频监控GB28181平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持视频定时轮播。视频监控汇聚平台EasyCVR支持多种播放协议,包括:H......
  • 【云原生 | Kubernetes 系列】— Kubernetes存储方案
    目录【云原生|Kubernetes系列】—Kubernetes存储方案......
  • 公共的网络云盘的存储真的安全吗?—— 百度云盘上的PDF文件无故被改名
    在百度云盘上上传了一个PDF文件,内容:本来是没有啥问题的,但是今天使用百度云盘发现这个PDF文件居然被改名,被取消掉了扩展名:简直是离谱离了一个大谱,太可怕了,看来这种公共云盘真的不太靠谱,虽然我是年年交会员费,居然还会动我存的文件,即使没有给我删除,但是给我偷偷改了扩展名,太气......
  • 聊一聊 C# 的线程本地存储TLS到底是什么
    聊一聊C#的线程本地存储TLS到底是什么 一:背景1.讲故事有朋友在后台留言让我说一下C#的 ThreadStatic 线程本地存储是怎么玩的?这么说吧,C#的ThreadStatic是假的,因为C#完全是由CLR(C++)承载的,言外之意C#的线程本地存储,用的就是用C++运行时提供的 __declspec(thread) 或 ......
  • 轻量对象存储 LighthouseCOS 用户实践征文
    产品使用攻略、上云技术实践,有奖征集,多重好礼等您带回家~存储桶一键挂载轻量应用服务器,简单易用,腾讯云轻量对象存储用户实践征文活动特惠:腾讯云轻量云专场特惠活动。投稿说明注册/登录腾讯云账号,腾讯云开发者社区PC端页面右上角点击写文章发布文章,作者可自荐上首页及分享文......
  • 数据结构——顺序线性表(向量)
    参考文章:数据结构(顺序表——线性表)_创建顺序线性表sl,调用initlist()函数对sl初始化-CSDN博客以下是作为个人笔记,自己学习用。线性表是具有相同特性的数据元素的一个有限序列,在线性表中每个数据元素由逻辑序号唯一确定。线性表的特性:1.有穷性:表中元素个数是有限的。2.一致性:表中所......
  • 全解OSS存储图片问题
    存储图片问题概述什么是OSS(对象存储服务)什么是OSS(对象存储服务)对象存储服务)是一种用于存储和管理大规模数据的云存储服务。它通过提供高可靠性、高可扩展性和低成本的存储解决方案,帮助用户实现数据的持久存储和随时访问。OSS可以存储各种类型的数据,包括图片、视频、文档等,并且......
  • VueRouter中存储路由的参数是什么?
    一、VueRouter的基本介绍什么是VueRouter是一个Vue.js官方的路由管理器,它可以帮助我们在Vue.js应用中实现页面之间的导航和跳转。它提供了一系列的API和配置选项,使得我们可以更加灵活地管理和控制应用的路由。在VueRouter中,存储路由的参数主要是通过路由对象来实现的。每当我们进行......
  • MySQL 数据库归档工具pt-archive 与归档数据的安全存储 与 为什么每次归档都少数...
    DBA在日常的工作中,数据归档是DB人员工作中的必选项。这里有技术的因素和法律的因素,数据库中的业务在使用一段时间内,数据表中必然存在大量的过期的数据,这些数据将不在与当前的业务有关,同时这些数据的存在会影响当前一些SQL的执行的性能,所以从技术的角度需要进行数据的归档。从法......
  • 数据结构【线性表之单链表】
    链表链表:线性表还可以使用链式存储方式保存,即线性表中的各个元素保存在各自的存储空间中,形成一个个节点。这些结点在内存的地址不要求是相邻的,它们之间通过指针连接起来。特点:灵活存储,不要求预先分配一块连续的空间,而是按需分配,随时需要,随时分配不要求分配的空间必须是相邻的没有......