第18课 - 顺序存储线性表的分析

原创 2018年04月16日 17:51:09

1、顺序存储线性表的分析 

        效率分析 

        

 

        问题

                长度相同的两个Seqlist , 插入删除 

                    操作的平均耗时是否相同?


2、编程实验 

SeqList效率分析 SeqList.h 




        下面的代码正确吗?为什么?

    


                                        两次释放堆空间


        下面的代码正确吗?为什么?

        


                            两次插入,且两个对象析构时释放了同一片堆空间



        分析 

                对于容器类型的类,可以考虑禁用拷贝构造和赋值操作


3、代码优化 

List.h     SeqList.h 

List.h

  1. #ifndef LIST_H  
  2. #define LIST_H  
  3.   
  4. #include"Object.h"  
  5.   
  6. namespace DTLib  
  7. {  
  8.   
  9. template <typename T>  
  10. class List : public Object  
  11. {  
  12. protected:  
  13.     List(const List& e);              //直接声明为保护成员即可
  14.     List& operator= (const List& e);  
  15. public:  
  16.     List(){}              
  17.     virtual bool insert(const T& e) = 0;  
  18.     virtual bool insert(int i,const T& e) = 0;  
  19.     virtual bool remove(int i) = 0;  
  20.     virtual bool set(int i,const T& e) = 0;  
  21.     virtual bool get(int i,T& e) const = 0;  
  22.     virtual int length() const = 0;  
  23.     virtual void clear() = 0;  
  24. };  
  25. }  
  26.   
  27. #endif // LIST_H  

SeqList.h

增加

    bool insert(const T& e)
    {
        return insert(m_length,e);
    }

main.cpp

  1. #include<iostream>  
  2. #include"DynamicList.h"  
  3.   
  4. using namespace std;  
  5. using namespace DTLib;  
  6.   
  7. int main()  
  8. {  
  9.     DynamicList<int> l(5);  
  10.   
  11.     for(int i=0;i<l.capacity();i++)  
  12.     {  
  13.         l.insert(i);  
  14.     }  
  15.   
  16.     for(int i=0;i<l.length();i++)  
  17.   
  18.     {  
  19.         cout<<l[i]<<endl;  
  20.     }  
  21.   
  22.   
  23.     return 0;  
  24. }  

                        

            下面的代码正确吗?为什么?

    StaticList<int,5> list;
    for(int i=0;i<list.capacity();i++)
    {
        list[i] = i*i;      //将线性表当数组使用
    }



    //顺序存储线性表的数组访问方式
    T& operator[] (int i)
    {
        if((0 <= i)&&(i < m_length))
        {
            return m_array[i];
        }
        else
        {
            THROW_EXCEPTION(IndexOutOfBoundsExpception,"Parameter i is invalid...");
        }
    }

                    线性表必须先插入元素,才能使用操作符[]访问元素


        问题分

                顺序存储结构线性表提供了数组操作符重载通过重载能够 

                快捷方便的获取目标位置处的数据元素在具体的使用形式 

                上类似数组但是由于本质不同,不能代替数组使用。      

     

4、小结 

             顺序存储线性表的插入和删除操作存在重大效率隐患 

            线性表作为容器类,应该避免拷贝构造和拷贝赋值 

            顺序存储线性表可能被当成数组误用 

            工程开发中可以考虑使用数组类代替原生数组使用 


版权声明:该博客笔记均整理于狄泰软件,未经博主允许,禁止将笔记转载 https://blog.csdn.net/qq_39654127/article/details/79962838

数据结构基础系列(2):线性表

数据结构课程是计算机类专业的专业基础课程,在IT人才培养中,起着重要的作用。课程按照大学计算机类专业课程大纲的要求,安排教学内容,满足需要系统学习数据结构的人。系列课程包含11个部分,本课为第2部分,线性表的逻辑结构,线性表的顺序表和链表两种存储结构,以及在各种存储结构中基本运算的实现,还通过相关的应用案例介绍了相关知识的应用方法。
  • 2015年08月26日 09:28

线性表的链式存储结构和顺序存储结构优缺点

线性表的链式存储结构和顺序存储结构优缺点   顺序存储用一段连续的存储单元依次存储线性表的数据元素 单链表采用链式存储结构,用一组任意的存储单元存放线性表元素   时间性能   查找 ...
  • pengGeiii
  • pengGeiii
  • 2014-12-28 20:55:42
  • 1705

数据结构与算法(1)线性表的顺序存储结构

转专业到计算机,最近在努力的提高自己的编程能力。数据结构与算法可以说是程序员的内功心法,我也下定决心学好这项内容,因此准备写下这一路的体会。一来鞭策自己不要中途懈怠、半途而废,二来以备将来查看方便。在...
  • dfq12345
  • dfq12345
  • 2016-08-11 17:42:19
  • 1468

数据结构-线性表的顺序存储

  • 2017年09月17日 20:01
  • 15KB
  • 下载

线性表顺序存储-使用c语言实现

/*线性表功能的实现*/ #include//定义常量 存储空间的初始化分配 #define MAXSIZE 20 #define TRUE 1 #define ERROR -1 #define FA...
  • u010187139
  • u010187139
  • 2015-06-27 11:24:45
  • 3681

C++实现顺序存储的线性表

在Visual Studio2012环境下用C++实现了顺序表的基本操作
  • xiaoxiaoxiaohaozi
  • xiaoxiaoxiaohaozi
  • 2016-04-07 14:24:01
  • 888

线性表顺序存储优缺点,线性链表的优缺点

线性表的顺序存储  优点: 具有简单、运算方便等优点,特别是对于小线性表或长度固定的线性表,采用顺序存储结构的优越性更为突出;  缺点:1.顺序存储插入与删除一个元素,必须移动大了的数据元素,以此...
  • xumin07061133
  • xumin07061133
  • 2012-07-28 12:18:13
  • 3720

线性表的顺序存储和链式存储差异

线性表的顺序存储和链式存储方式在存读数据以及插入删除数据时,时间复杂度不同。顺序存储的典型例子为数组,链式存储的典型例子为单链表。众所周知,当读取数据较为频繁时,我们选择顺序存储方式,当插入和删除操作...
  • lanmengyiyu
  • lanmengyiyu
  • 2017-05-25 20:26:22
  • 861

线性表的顺序存储实现及相关操作 C语言版

/* 线性表的顺序存储实现 C语言版本 作者:Shmily 日期:2011年8月30日 编译环境 VC++6.0 */ /****************************...
  • zhuyi2654715
  • zhuyi2654715
  • 2011-08-30 15:20:28
  • 2050

学习 线性表的顺序存储 总结一

学习 线性表的顺序存储 总结一线性表是最简单的一种数据结构了,也是最常用的一种。线性表的逻辑结构简单,便于实现和操作。线性表有以下两个特点: 1. 它首先是个序列,元素之前是有顺序的。 数据元素之间...
  • wan198809
  • wan198809
  • 2015-09-10 22:21:01
  • 320
收藏助手
不良信息举报
您举报文章:第18课 - 顺序存储线性表的分析
举报原因:
原因补充:

(最多只允许输入30个字)