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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lihn1987/article/details/55053068

欢迎转载和引用,若有问题请联系
若有问题,请联系
Email : [email protected]
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
  这里写图片描述
  发现只需要修改其前面一个的索引和后面所有数据的索引即可。
  而删除一个数据同添加一样,只不过是个逆过程罢了。

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

循环链表

双向链表

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

其他类型的线性表

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

  • 静态循环链表
  • 静态双向链表
  • 循环双向链表
    等等各种组合,一个一个讲意义不大,说者无味,听者无趣~

参考内容 《大话数据结构》 陈杰

扫描二维码关注公众号,回复: 4108220 查看本文章

猜你喜欢

转载自blog.csdn.net/lihn1987/article/details/55053068