第16课 - 顺序存储结构的抽象实现

原创 2018年04月15日 18:10:15

1、顺序存储结构的抽象实现 

        课程目标 

            -完成顺序存储结构线性表的抽象实现 

                


        Seqlist设计要点 

            -抽象类模板,存储空间的位置和大小由子类完成 

            -实现顺序存储结构线性表的关键操作(增,删,查,等) 

            -提供数组操作符,方便快速获取元素 


        顺序存储结构的抽象实现 

    bool insert(int i,const T& e);
    bool remove(int i);
    bool set(int i,const T& e);
    bool get(int i,T& e) const;
    int length() const;
    void clear();
    //顺序存储线性表的数组访问方式
    T& operator[] (int i);
    T opertaor[] (int i) const; //考虑只读对象
    //顺序存储空间的长度
    virtual int capacity() const = 0; 


2、编程实验 

顺序存储线性表     Seqlist.h 

  1. #ifndef SEQLIST_H  
  2. #define SEQLIST_H  
  3.   
  4. #include"List.h"  
  5. #include"Exception.h"  
  6.   
  7. namespace DTLib  
  8. {  
  9.   
  10. template <typename T>  
  11. class SeqList : public List<T>  
  12. {  
  13. protected:  
  14.     T* m_array;     //顺序存储空间  
  15.     int m_length;   //当前线性表长度  
  16. public:  
  17.     bool insert(int i,const T& e)  
  18.     {  
  19.         bool ret = (0 <= i)&&(i <= m_length);  
  20.   
  21.         ret = ret && (m_length<capacity());  
  22.   
  23.         if(ret)  
  24.         {  
  25.             for(int p=m_length-1;p>=i;p--)  
  26.             {  
  27.                 m_array[p+1] = m_array[p];  
  28.             }  
  29.   
  30.             m_array[i] = e;  
  31.             m_length++;  
  32.         }  
  33.   
  34.         return ret;  
  35.     }  
  36.     bool remove(int i)  
  37.     {  
  38.         bool ret = (0 <= i)&&(i < m_length);  
  39.         if(ret)  
  40.         {  
  41.             for(int p = i;p<m_length;p++)  
  42.             {  
  43.                 m_array[p] = m_array[p+1];  
  44.             }  
  45.   
  46.             m_length--;  
  47.         }  
  48.   
  49.   
  50.         return ret;  
  51.     }  
  52.   
  53.     bool set(int i,const T& e)  
  54.     {  
  55.         bool ret = (0 <= i)&&(i < m_length);  
  56.   
  57.         if(ret)  
  58.         {  
  59.             m_array[i] = e;  
  60.         }  
  61.   
  62.         return ret;  
  63.     }  
  64.   
  65.     bool get(int i,T& e) const  
  66.     {  
  67.         bool ret = (0 <= i)&& (i < m_length);  
  68.   
  69.         if(ret)  
  70.         {  
  71.             e = m_array[i];  
  72.         }  
  73.   
  74.         return ret;  
  75.     }  
  76.     int length() const  
  77.     {  
  78.         return m_length;  
  79.     }  
  80.     void clear()  
  81.     {  
  82.         m_length = 0;  
  83.     }  
  84.   
  85.     //顺序存储线性表的数组访问方式  
  86.     T& operator[] (int i)  
  87.     {  
  88.         if((0 <= i)&&(i < m_length))  
  89.         {  
  90.             return m_array[i];  
  91.         }  
  92.         else  
  93.         {  
  94.             THROW_EXCEPTION(IndexOutOfBoundsExpception,"Parameter i is invalid...");  
  95.         }  
  96.     }  
  97.   
  98.     T operator[] (int i) const //考虑只读对象  
  99.     {  
  100.         return (const_cast<SeqList<T>&>(*this))[i];       //代码复用  
  101.     }  
  102.     //顺序存储空间的容量  
  103.     virtual int capacity() const = 0;  
  104. };  
  105.   
  106. }  
  107.   
  108.   
  109. #endif // SEQLIST_H  


main.cpp

  1. #include<iostream>  
  2. #include"SeqList.h"  
  3.   
  4. using namespace std;  
  5. using namespace DTLib;  
  6.   
  7. int main()  
  8. {  
  9.     SeqList<int>* l;  
  10.   
  11.     return 0;  
  12. }  


3、实战预告




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

DirectX5.0最新游戏编程指南 DirectDraw篇 二、DirectDraw的体系

二、DirectDraw的体系    多媒体软件要求高性能的图象。通过DirectDraw,Microsoft使得对图象敏感性的程序在速度和效率上都比在GDI上有了大大是提高,同时又保持了设备无关性,...
  • holyfire
  • holyfire
  • 2001-04-14 12:53:00
  • 1801

第16课 - 类的真正形态

1、问题            经过不停的改进,结构体struct变得越            来越不像它在C语言中的样子了!!!2、类的关键字            struct在C语言中已经有了自...
  • qq_39654127
  • qq_39654127
  • 2018-03-24 16:19:42
  • 11

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

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

用OpenSceneGraph实现的NeHe OpenGL教程 - 第十六课

简介 本节课实现了在场景中添加雾效,在OpenGL中添加雾效使用glFog函数来设置,在OSG中也十分的简单,雾效作为一个StateAttribute来添加到节点的。 实现 本节课在第七课的基...
  • csxiaoshui
  • csxiaoshui
  • 2014-02-21 11:13:59
  • 1470

线性表的顺序存储结构与链式存储结构的比较

1. 顺序存储结构: 优点: 1)随机存取(时间复杂度为O(1)); 2)无需为表示表中元素之间的逻辑关系而增加额外的存储空间; 缺点: 1)插入、删除操作需要移动大量元素,效率低(时间复杂...
  • njnu_mjn
  • njnu_mjn
  • 2011-10-29 21:59:47
  • 17216

数据结构--顺序存储结构及抽象实现

顺序存储的定义: 线性表的顺序存储结构指的是用一段地址连续的存储单元依次存储线性表中的数据元素,例如原生数组。 设计思路: 利用一维数组来实现顺序存储结构。 存储空间:T* m_array; 当前长度...
  • tqs_1220
  • tqs_1220
  • 2017-12-17 22:45:03
  • 53

OpenGL教程翻译 第十六课 基本的纹理贴图

第十六课 基本的纹理贴图背景纹理贴图就是将任意一种类型的图片应用到 3D 模型的一个或多个面上。图片(也可以称之为纹理)内容可以是任何东西,但是他们一般都是一些比如砖,叶子,地面等的图案,纹理贴图增加...
  • Vcube
  • Vcube
  • 2015-09-17 12:34:34
  • 1419

Alex 的 Hadoop 菜鸟教程: 第16课 Pig 安装使用教程

本教程介绍Pig的安装和使用。hdfs虽说是一个文件空间,但是我们每次要查看hdfs上的文件的时候都要输入一大串命令,比如一个简单的ls都需要输入 : hdfs dfs -ls / ,而且还不能cd到...
  • nsrainbow
  • nsrainbow
  • 2015-02-09 18:25:16
  • 2842

线性表的顺序存储结构(插入与删除)

1.顺序存储定义 线性表中的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。 2.地址计算方法 线性表的第i个元素是要存储在数组下标为i-1的位置。 假设占用的是c个存储...
  • rujin_shi
  • rujin_shi
  • 2018-03-05 10:42:18
  • 43

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

线性表顺序存储实现元素的插入,删除和读取
  • jihao0919
  • jihao0919
  • 2016-09-23 00:39:44
  • 699
收藏助手
不良信息举报
您举报文章:第16课 - 顺序存储结构的抽象实现
举报原因:
原因补充:

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