数据结构学习总结(三)广义表

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/1rsMZWGitHub:https://github.com/githubligao/Data-Structure.git上下载我的实现代码。
线性表的实现存放在GeneralList文件夹中的头文件int_GeneralList.h中。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值