数据结构3----线性表中链式结构的其他几种实现(霜之小刀)
来源:互联网 发布:广东中标数据科技 编辑:程序博客网 时间:2024/05/09 14:51
欢迎转载和引用,若有问题请联系
若有问题,请联系
Email : lihn1011@163.com
QQ:2279557541
前言
链式结构除了上一篇结构中所讲的单项链表外, 还有另外几种。按照<大话数据结构>中所说
包括
- 静态列表
- 循环链表
双向链表
而在我看来,这几种链表基本没法独立成一种数据结构,只是对前面的扩展而已,有些甚至都意义不大,比如静态链表。
下面我来一个一个的介绍
静态链表
首先,静态的意思就是链表的大小是固定的,链表的意思是每一项数据间是需要索引联系的
所以得静态链表的意思就是固定大小的,由索引相互联系的数据结构。
《大话数据结构》住列举的例子是这样的:
在连续的内存空间内,以数组的形式实现,数组中每个数据的包含要存储的数据和索引。
代码简单描述下:
template<class DataType, int max_size> class StaticLink { public: struct LinkStu { DataType m_data; //保存数据 int m_next_idx; //指向下一个数据元素的数组下标索引 }; private: LinkStu m_item_list[max_size]; //用于保存整个静态链表 unsigned int m_size; //整个数组的大小 };
在<大话数据结构>这本书中,对这个结构讲的比较详细,由于c和c++还是有些区别的,所以这里的实现看起来更加的简洁,而这种结构的示意图如下所示。
下面来说以下他的添加和删除操作
举个实例
下图描述的是一个普通的静态链表的状态
然后我们往里面添加一个数据,举个特殊的例子,在数据3和数据4之间添加一个数据5
发现只需要修改其前面一个的索引和后面所有数据的索引即可。
而删除一个数据同添加一样,只不过是个逆过程罢了。
这种结构的意义是什么呢?书上说的是,插入一个数据只需要修改索引,将索引一个个修改完就好,避免了数据的拷贝。这种看法我是不认同的,因为如果我们把上一章中顺序存储结构保存的变量类型改为指针,那么其拷贝的工作量同修改索引基本是一样的。那么书中的意思我之能理解为也许是对没有指针的编程语言说的。
循环链表
双向链表
这两种链表很常见,其实意思和他字面的意思基本一致。循环链表指的是链表尾索引到链表头构成的一个环状的链表双向链表指的是,每个数据节点除了有向后的索引外再加一个向前的索引。具体的示意图我就不画了。
其他类型的线性表
之所以在文章的开头我说这几种链表只是对前面链表的扩展,其实更主要的是,按照这个扩展我们还能扩展出很多类型的线性表
比如
- 静态循环链表
- 静态双向链表
- 循环双向链表
等等各种组合,一个一个讲意义不大,说者无味,听者无趣~
参考内容 《大话数据结构》 陈杰
0 0
- 数据结构3----线性表中链式结构的其他几种实现(霜之小刀)
- 数据结构2----线性表顺序存储和链式存储的实现(霜之小刀)
- 进击的数据结构二之线性表的链式结构
- 数据结构:线性表之链式存储结构
- 【数据结构】线性表之链式存储结构
- 数据结构:线性表之链式存储结构
- 数据结构笔记之线性表的链式存储结构
- Python 数据结构 之 线性表 的链式存储结构
- 【数据结构】线性表的链式存储结构
- 【数据结构】-线性表的链式存储结构
- 数据结构之线性表的链式表示及其实现
- 数据结构之线性表的链式表示和实现
- 数据结构---线性表的链式实现
- 数据结构 -->线性表的链式实现 ADT
- 数据结构之线性表的链式存储
- 链式结构线性表的实现
- 链式结构线性表的实现
- java实现的链式线性表结构
- 开题:EffectiveJava
- Treap=Tree+Heap! 各种BST大PK(模板)
- caffe源码深入学习1:caffe.cpp解析
- MVC,MVP 和 MVVM 的图示
- 用java模拟windows下的dir指令
- 数据结构3----线性表中链式结构的其他几种实现(霜之小刀)
- 并查集
- C# 坐标变换::
- Js数组的基本方法1
- 第十五章 String类
- hdoj1028
- 2、SQL Server:SQL利用Case When Then多条件判断SQL 语句
- Ubuntu14.04lts wifi连接不稳定问题
- POJ 3693 Maximum repetition substring (后缀数组+RMQ 求重复最多的连续子串)