线性表的顺序存储——线性表的本质和操作

1,线性表(List)的表现形式:

       1,零个或多个数据元素组成的集合;

       2,数据元素在位置上是有序排列的;

       3,数据元素的个数是有限的;

       4,数据元素的类型必须相同;

      

2,线性表抽象定义:

       1,线性表是具有相同类型的 n(>=0) 个数据元素的有限序列:

                (a0, a1, a2, a3, ... , an-1)

          其中,ai 是表项(数据元素),n 是表长度;

         

3,线性表的性质:

       1,a0 为线性表的第一个元素,只有一个后继;

       2,an-1 为线性表的最后一个元素,只有一个前驱;

       3,除 a0 和 an-1 外的其它元素 ai,既有前驱,又有后继;

       4,直接支持逐项访问和顺序存取;

      

4,线性表的一些常用操作(插删获设长清):   

       1,将元素插入线性表;

       2,将元素从线性表中删除;

       3,获取目标位置处元素的值;

       4,设置目标元素处元素的值;

       5,获取线性表的长度;

       6,清空线性表;

      

5,线性表在程序中表现为一种特殊的数据结构,其抽象类创建如下:

 1 #ifndef LIST_H
 2 #define LIST_H
 3 
 4 #include "Object.h"
 5 
 6 namespace DTLib
 7 {
 8 
 9 template <typename T>   // 用模板的方式描述 List,所以不需用 *.cpp 文//件;
10 class List : public Object
11 {
12 protected:  // 定义这两个保护函数,是为了继承给子类,让其拥有拷贝和赋值构造函数,但是却不能被外界使用,这然就阻止了拷贝赋值的产生,更加贴合生活,也避免了同一块内存被两个指针指向,造成重复释放的问题;
13     List(const List&);
14     List& operator= (const List&);
15 public:
16     List() {}  // 已经添加构造函数了,所以编译器就不会为我们再添加构造函数,要手工添加一个;
17     virtual bool insert(const T& e) = 0;     // 在线性表的尾部默认的插入一个元素,所以 i 省略了;
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 find(const T& e) const = 0;
23     virtual int length() const = 0;
24     virtual void clear() = 0;
25 };
26 }
27 #endif // LIST_H

6,以下是创建抽象类的测试代码:

 1 #include <iostream>
 2 #include "List.h"
 3 
 4 using namespace std;
 5 using namespace DTLib;
 6 
 7 int main()
 8 {
 9     List<int>* l = NULL;
10 }

7,小结:

       1,线性表是数据元素的有序并且有限集合;

       2,线性表中的数据元素必须是类型相同的;

       3,线性表可用于描述派对关系的问题;

       4,线性表在程序中表现为一种特殊的数据类型;

       5,线性表在 C++ 中表现为一个抽象类;

原文地址:https://www.cnblogs.com/dishengAndziyu/p/10921408.html