美文网首页
记录七 线性表

记录七 线性表

作者: 筏执 | 来源:发表于2020-02-02 19:11 被阅读0次
前言

线性表是属于线性结构,线性结构的基本特点是除第一个元素无直接前驱,最后一个无直接后继之外,其他的每个数据元素都有一个前驱和后继。

线性表是什么?

线性表是最基本且最常用的一种线性结构。同时也是其他数据结构的基础。

线性表(Linear List):全称线性存储结构,其数据元素之间的关系是 一对一 的关系。即除第一个元素无直接前驱,最后一个无直接后继之外,其他的每个数据元素都有一个前驱和后继。

如何理解在内存中的线性表

在内存中的线性表,我们可以简单的理解为一根绳子,将所有的数据按顺序全部都串在一起了。

而绳子的头部就是线性表的第一个元素,绳子的尾部为线性表的最后一个元素。

记录四 初识数据结构中,谈到了数据的存储结构分为了顺序存储结构和链式存储结构。下面,我们用这两种结构去了解一下。

顺序存储结构:一片连续的空间,数据依次存储在空间中,空间内存地址逐渐增大。这种存储结构称为顺序存储结构,简称顺序表。

顺序存储结构
链式存储结构: 空间不连续,数据通过媒介来找到下一个数据。空间的内存地址是随机分配的。但通常内存地址也是增大的。这种存储结构称为链式存储结构,简称链表。
链式存储结构
线性表的抽象数据类(C++)
namespace list{//线性表命名空间

    /**状态枚举定义**/
    enum Status{

        SUCCESS,FAIL,MEMORY_ALLOCATION_FAILED,ARRAY_OUT_OF_BOUNDS,OTHER_ERROR

        /**枚举定义说明
         * SUCCESS:操作成功
         * FAIL:操作失败
         * MEMORY_ALLOCATION_FAILED:内存分配失败
         * ARRAY_OUT_OF_BOUNDS:数组下标越界
         * OTHER_ERROR:其它错误
         */
    }; 

    /**顺序表抽象数据类型定义**/
    template<typename T>   //模板
    class ListSelf
    {
        protected:
            /**
             * 构造一个顺序表,动态申请内存。
             */
            virtual Status init() = 0;
            /**
             * 销毁顺序表,回收内存。
             */ 
            virtual Status destroy() = 0;
        public:    
            /**
             * 在相应的位置上插入新的数据
             */ 
            virtual Status insert(T elem,size_t index) = 0;
            /**
             * 在线性表的末尾插入新的数据 
             */
            virtual Status insert(T elem) = 0;
            /**
             * 取出线性表的数据元素
             */ 
            virtual T at(size_t index) = 0;
            /**
             * 返回数据的索引下标
             */  
            virtual int local(T elem) = 0;
            /**
             * 修改指定位置的数据
             */ 
            virtual Status updateIndex(T newElem,size_t index)=0;
            /**
             * 修改匹配的数据
             */
            virtual Status update(T oldElem,T newElem) = 0;
            /**
             * 在相应的位置上删除数据
             */ 
            virtual Status removeIndex(size_t index) = 0;
            /**
             * 移除线性表中相同的元素
             */ 
            virtual Status remove(T elem) = 0;
            /**
             * 返回查找元素的直接前驱
             */ 
            virtual T * prior(T elem) = 0;
            /**
             * 返回查找元素的直接后驱
             */ 
            virtual T * next(T elem) = 0; 
            /**
             * 返回线性表中元素的个数
             */ 
            virtual size_t size() = 0;
            /**
             * 将线性表重置为空表,清空所有数据
             */ 
            virtual void clear() = 0;
            /**
             * 判断线性表是否为空表,如果是空表,返回true,否则返回false
             */ 
            virtual bool isEmpty() = 0;
            /**
             * 遍历线性表
             */ 
            virtual Status show() = 0;

    };  //抽象类结束

    /**
     * 链式存储结构抽象类
     */ 
    template<typename T>
    class LinkSelf{
        protected:
            /**
             * 构造一个链表头
             */
            virtual Status init() = 0;

            /**
             * 销毁链表,回收内存。
             */ 
            virtual Status destroy() = 0;
        public:
            /**
             * 向链表中添加数据
             */
            virtual Status add(T elem) = 0;
            /**
             * 修改链表中的数据
             */
            virtual Status update(T oldElem,T newElem) = 0;
            /**
             * 删除链表中的数据
             */  
            virtual Status remove(T elem) = 0;
            /**
             * 链表中结点的个数
             */ 
            virtual size_t size() = 0;
            /**
             * 返回查询结点的上一个结点的指针
             */ 
            virtual T * prior(T elem) = 0;
             /**
              * 返回查询结点的下一个结点的指针 
              */
             virtual T * next(T elem) = 0;
             /**
              * 返回头指针
              */
             virtual T * header() = 0;
             /**
              * 返回尾部指针
              */
             virtual T * tail() = 0;
             /**
              * 为链表进行排序
              */
             virtual Status sort() = 0;
             /**
              * 清空链表
              */
             virtual void clear() = 0;
             /**
              * 遍历整个链表
              */
            virtual Status show() = 0;      
    };//链式存储结构抽象类结束
    

    /**
     *顺序存储结构类 
     */
    template<typename T,size_t SIZE>
    class OrderList : public ListSelf<T>{//OrderList : 顺序表类 继承 线性表抽象类(ListSelf) 
    };//顺序存储结构类结束

    /**
     *链式存储结构类 
     */
    template<typename T>
    class LinkedList : public LinkSelf<T>{//LinkedList : 单链表类 继承 链表抽象类(LinkSelf)
    };//链式存储结构类结束

}//命名空间结束
线性表还没有结束

(emmmm,很尴尬的一件事情。我觉得我不能在晚上学习。因为我发现我在晚上学习,我会失眠。大脑里面想了许许多多的东西。大部分都是关于程序的。所以,我决定晚上不写了。)

(有没有发现今天的字数特别少。是的。因为我昨天晚上4点睡得。6点自己就起床了。昨天晚上只睡了两个小时。看了几个小时的STL源码解析。想要在看看大神们是如何实现数据结构的。为了自己的狗命。晚上还是少敲代码。。)

(明天再写吧。明天应该最主要的应该是顺序结构的实现。明天是要码代码的哦。)

相关文章

  • 记录七 线性表

    前言 线性表是属于线性结构,线性结构的基本特点是除第一个元素无直接前驱,最后一个无直接后继之外,其他的每个数据元素...

  • 记录十一 线性表的链式存储结构

    前言 在前面记录八 线性表的顺序存储结构和记录九 线性表的顺序存储结构扩展(动态顺序表)中我们了解到线性表的顺序存...

  • 线性表 - Sequential List

    0 序言1 简析线性表2 记录线性表的使用 序言 基本数据结构记录系列,记录基本的数据结构实现和JDK、SDK等中...

  • 线性表 — 顺序存储

    前言 记录数据结构与算法学习,内附详细实现方法,方便后续回顾。 一、线性表基础概念 线性表存储方式包括:顺序存储和...

  • 二分查找

    二分查找: 它的前提是线性表中的记录必须是有序,线性表必须采用顺序存储。 基本思想: 在有序表中,取中间记...

  • 数据结构与算法学习-数组

    前言 这一篇笔记主要记录总结了线性表数据结构中的数组概念以及相关的算法。 名词解释 1. 线性表(Linear L...

  • 查找之有序表查找(十)

    1.二分查找(折半查找) 它的前提是线性表中的记录必须是有序的,线性表必须采用顺序存储。折半查找的基本思想是:在有...

  • 顺序表(二)

    2.1 线性表 线性表是最基本的数据结构之一,它是某类元素的集合,记录着元素之间的一种顺序关系,是实现更复杂数据结...

  • 线性表的相关操作

    集合 --- 创建线性表 解散 --- 销毁线性表 长度 --- 得到线性表的长度 出列 --- 从线性表删除一个...

  • [数据结构]第二章线性表(1)——线性表

    线性表 线性表的基本概念 线性表的定义 线性表是具有相同数据类型的n(n>=0)个元素的有限序列。 线性表的基本操...

网友评论

      本文标题:记录七 线性表

      本文链接:https://www.haomeiwen.com/subject/flhqxhtx.html