您的位置:首页 > 理论基础 > 数据结构算法

数据结构3----线性表中链式结构的其他几种实现(霜之小刀)

2017-02-13 20:21 525 查看
欢迎转载和引用,若有问题请联系

若有问题,请联系

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

  


  发现只需要修改其前面一个的索引和后面所有数据的索引即可。

  而删除一个数据同添加一样,只不过是个逆过程罢了。

这种结构的意义是什么呢?书上说的是,插入一个数据只需要修改索引,将索引一个个修改完就好,避免了数据的拷贝。这种看法我是不认同的,因为如果我们把上一章中顺序存储结构保存的变量类型改为指针,那么其拷贝的工作量同修改索引基本是一样的。那么书中的意思我之能理解为也许是对没有指针的编程语言说的。


循环链表

双向链表

这两种链表很常见,其实意思和他字面的意思基本一致。
循环链表指的是链表尾索引到链表头构成的一个环状的链表
双向链表指的是,每个数据节点除了有向后的索引外再加一个向前的索引。
具体的示意图我就不画了。


其他类型的线性表

  之所以在文章的开头我说这几种链表只是对前面链表的扩展,其实更主要的是,按照这个扩展我们还能扩展出很多类型的线性表

  比如

静态循环链表

静态双向链表

循环双向链表

等等各种组合,一个一个讲意义不大,说者无味,听者无趣~

参考内容 《大话数据结构》 陈杰
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息