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// 用模板的方式描述 List,所以不需用 *.cpp 文//件;10 class List : public Object11 {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 #include2 #include "List.h" 3 4 using namespace std; 5 using namespace DTLib; 6 7 int main() 8 { 9 List * l = NULL;10 }
7,小结:
1,线性表是数据元素的有序并且有限集合;
2,线性表中的数据元素必须是类型相同的;
3,线性表可用于描述派对关系的问题;
4,线性表在程序中表现为一种特殊的数据类型;
5,线性表在 C++ 中表现为一个抽象类;