线性表《二》
广义表:
1,广义表是线性表的推广
2,对于线性表而言,n个元素都是基本的单元素;
3,广义表中,这些元素不仅可以是单元素也可以是另一个广义表
typedef struct GNode *GList; struct GNode{ int Tag; /*标志域:0表示结点是单元素,1表示结点是广义表*/ union{ /*子表指针域Sublist与单元素数据域Data复用,即共用存储空间*/ ElementType Data; GList SubList; }URegion; GList Next; /*指向后继结点*/ };
Tag |
Data or SubList |
Nest |
多重链表:链表中的节点可能同时隶属于多个链
1,多重链表中结点的指针域会有多个,如前面例子包含了Next和SubList两个指针域;
2,但包含两个指针域的链表并不一定是多重链表,比如在双向链表不是多重链表
多重链表有广泛的用途:
基本上如树、图这样相对复杂的数据结构都可以采用多重链表的方式实现存储。
【例】矩阵可以用二维数组表示,但二维数组表示有两个缺陷:
*一是数组的大小需要事先确定。
*对于“稀疏矩阵”,将造成大量的存储空间浪费。
采用一种典型的多重链表——十字链表来存储稀疏矩阵
#只存储矩阵非0元素项
结点的数据域:行坐标Row、列坐标Col、数值Value
#每个结点通过两个指针域,把同行、同列串起来;
行指针(或称为向右指针)Right
列指针(或称为向下指针)Down
用一个标识域Tag来区分头节点和非0元素节点:
头节点的标识值为“Head",矩阵非0元素结点的标识值为”Term".
堆栈:
中缀表达式
后缀表达式
堆栈:具有一定操作约束的线性表
只在一端(栈顶,Top)做插入、删除
插入数据:入栈(Push)
删除数据:出栈(Pop)
后入先出:LIst In First Out (LIFO)
堆栈的抽象数据类型描述
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端