数据结构学习笔记 (一)

来源:互联网 发布:如何安装网络机顶盒 编辑:程序博客网 时间:2024/04/30 00:46

线性表

一个线性表是n个数据元素的有限序列。数据元素可以是任何类型的数据。形如 (a1,...,ai-1,ai,ai+1,...,an),ai有且仅有一个直接前驱。线性表每个袁术也都有一个确定的位置,a1为第一个元素,a2为第二个,以此类推。当然当线性表也可以没有元素,此时它就被称为 空表 了。线性表可以进行访问,修改,插入和删除等操作。当然,还可以做一些扩充操作,比如表的合并与拆分等。

线性表的顺序表示和实现

线性表的顺序表示是指用一组地址连续的存储单元依次存储线性表的数据元素。这也就是说这些数据元素在内存中的分布是连续的。线性表的第一个元素的存储位置,通常也称作线性表的起始位置或者基地址。,通常这种线性表也叫做顺序表。只要知道元素的在表中的位置,通过指针可以很容易查找到。通常用数组来表示顺序表。

const int MaxListSize = 100;class List{int data[MaxListSize];int size;                   //元素的个数public:List(){ size = 0; };           //构造函数~List();void Clear(){ size = 0; };     //清空bool IsEmpty();             //判断是否为空int GetElem(int i);    //返回第i个元素int Locate(int e);     //返回第一个与e匹配的元素位序int Prior(int e); //返回e的前驱int Next(int e);  //返回e的后续void Insert(int e,int i);//在i个位置插入新元素eint Delete(int i);     //删除第i个元素,并返回其值int Length(){ return size; };void print();               //输出线性表的元素};

值得注意的是,线性表的总长度是固定的,若要存储的数据超出之前的估计将是一件麻烦的事情。

1.插入操作

void List::Insert(int e, int i){//在顺序表的第i个元素之前插入新的元素e//从数组中下标为i-1的元素后移//i的合法范围为1 <= i <= size+1if (i < 1 || i > size+1 || size >= MaxListSize){cout << "插入不成功" << endl;exit(0);}else{for (int j = size - 1; j >= i - 1; j--){data[j + 1] = data[j];data[i - 1] = e;size++;}}}

假设在线性表任何位置插入数据元素的概率是相同的,则插入一个元素时需要移动的元素的平均次数差不多占表中元素的一半,以上算法的平均时间复杂度为O(n);


2.删除操作


int List::Delete(int i){if (i<1 || i>size){cout << "删除位置不正确" << endl;exit(0);}else{int e = data[i - 1];for (int j = i-1; j < size-1; j++){data[j] = data[j + 1];size--;returne;}}}

算法的平均时间复杂度也是O(n).


3.定位操作


int List::Locate(int e){int i = 1;while (i<=size && data[i-1]!=e){i++;if (i > size) return 0;//没有找到else return i;}}


算法的平均时间复杂度也是O(n).


4.判断线性表是否为空

bool List::IsEmpty(){if (size == 0) return true;else return false;}


5.取元素

int List::GetElem(int i){if (i<1 || i>size){cout << "位置不正确" << endl;exit(0);}else{return data[i - 1];}}

6.输出元素


void List::print(){if (size == 0){cout << "空表,无元素" << endl;exit(0);}else{for (int i = 0; i < size; i++){cout << data[i];cout << endl;}}}


顺序存储结构小结:

优点:

 

1.无需为表示数据元素间的逻辑关系增加额外的存储空间;

2.可以方便地随机存取表中的任一元素。

 

缺点:

 

1.顺序存储结构要求占用连续的存储空间,线性表中元素的最大个数需要预先设定,这个数值不好把握。

2.在进行插入操作和删除操作时需要移动大量的元素。如果表比较大那消耗也是不容乐观的。









0 0