数据结构学习总结(三)广义表
2015-07-18 00:47
309 查看
1. 广义表
1思想
广义表可以说是线性表的一种泛型定义,它与线性表的主要区别是,广义表的一个数据单元记录的可以是数据本身,也可以记录一个存储数据的线性表。在C++中实现为vector<vector<>>模板类,而C#中则为数组的数组(形如[datatype][][] variableName的定义)。当然,无论是C++的vector<vector<>>还是C#的数组的数组,它们也只是实现了广义表的二级深度,而广义表可以是任意深度的。3级深度的广义表示意图如下:特别注意的是,C、C++、Java中的多维数组可以看作是特殊的广义表:因为在C、C++、Java中多维数组也是作为数组的数组实现的,与C#中的数组的数组的实现不同的是,C/C++/Java中每个一维数组长度都是相同的。在C/C++中动态分配的多维数组,其一维数组之间的空间分配不连续,而非动态分配的则连续;然而,无论空间分配是否连续,它们都是作为数组的数组实现的,遍历整个多维数组需要多个迭代器。另外,C#中的多维数组其实现应该说是一个定长的线性表(数组实现),其空间分配是连续的,且遍历整个多维数组可以只用一个迭代器。
2实现原理
由于线性表可以由数组以及链表实现,我们不难想到,广义表可以由纯数组,纯链表或者两者的混合实现。使用纯链表的实现:
用纯链表的实现,首先要定义一个节点类型,这个类型不仅可以存储数据本身,还可以存储一个链表。在C语言中,可以这样定义:
typedefstructgl_node
{
intflag;//mark this node store data or a list
union{
intdata;//store data
structgl_node*head;//head
pointer of list
};//content contained
structgl_node*next;
}glist_node;
可以到百度云:http://pan.baidu.com/s/1rsMZW或GitHub:https://github.com/githubligao/Data-Structure.git上下载我的实现代码。
线性表的实现存放在GeneralList文件夹中的头文件int_GeneralList.h中。
相关文章推荐
- 数据结构之String
- 数据结构之String
- 先序非递归遍历二叉树解析——面试高频数据结构
- 数据结构复习之栈和队列
- 课程笔记 03 :数据结构(清华) 向量
- C++学习之map类型 分类: 数据结构与算法 2015-07-17 15:07 11人阅读 评论(0) 收藏
- Java数据结构和算法的数组
- 课程笔记 04 :数据结构(清华) 向量-查找算法
- 常用数据结构STL实现(优先队列、队列、栈)
- 数据结构复习之线性表
- UVA11988 Broken Keyboard (a.k.a. Beiju Text)
- UVA 11136 Hoax or what 【multiset】
- 基本数据结构之Stack类(一)
- UVALive 4487 Exclusive-OR
- PAT 数据结构 06-图8. 关键活动(30)
- Java LinkedList特有方法程序小解 && 使用LinkedList 模拟一个堆栈或者队列数据结构。
- 数据结构进制转换源代码
- 数据结构赫夫曼树源程序
- 数据结构二叉树源程序
- 数据结构迷宫源程序