当前位置:   article > 正文

数据结构笔记1 线性表-顺序表示_!l.elem什么意思

!l.elem什么意思

预定义:

一、线性表的顺序表示

一些操作:

1. 线性表的初始化(参数为引用)

  1. //下列:函数返回类型 函数名称初始化线性表 参数表(参数类型 引用参数)
  2. Status InitList_Sq(SqList &L) {
  3. //构造一个空的线性表
  4. L.elem = New ElemType[MAXSIZE]; //动态分配L.elem的内存,类型为ElemType,个数为MAXSIZE
  5. //也可以写:
  6. //L.elem = (ElemType*)malloc(sizeof(ElemType)*MAXSIZE];
  7. if(!L.elem) //如果分配的地址值为空,则意味着分配失败
  8. exit(OVERFLOW); //exit(x)(x不为0)都表示异常退出,此时为-2 具体见链接
  9. //异常处理
  10. L.length = 0//初始化的线性表长度为0
  11. return OK; //成功,返回1
  12. }
C语言中的exit()函数_春卷同学的博客-CSDN博客_c语言exithttps://blog.csdn.net/Rex_WUST/article/details/88372481

2.销毁线性表(参数为引用)

  1. void DestroyList(SqList &L){
  2. if(L.elem) delete L.elem; //释放存储空间。要先判断是否存在。
  3. //delete: C++的语法。
  4. //C:free(L.elem);
  5. }

3.清空线性表

  1. Status ClearList(SqList &L){
  2. L.length = 0; //将线性表长度置0
  3. }

4.求线性表的长度

  1. Status GetLength(SqList L){ // 这里并不需要对L进行修改
  2. return(L.length);
  3. }

5.判断线性表长度

  1. int IsEmpty(SqList L){
  2. if(L.length == 0) return 1;
  3. else return 0;
  4. }

6.顺序表的取值(随机存取),根据位置i获取相应位置数据元素的内容

  1. int GetElem(int i,SqList L,int &e){
  2. if(i<1 || i>L.length) return ERROR;
  3. //异常处理,判断i是否合理
  4. e = L.elem[i-1]; //第i个元素对应下标i-1(第i-1的单元存储着第i个数据)
  5. return OK;
  6. }

  其算法复杂度是常量阶O(1),只执行一次。

7.按值查找元素

  1. int LocateElem(SqList L,ElemType e){
  2. //在线性表L中查找值为e的数据元素,返回其序号(是第几个元素)
  3. for(int i=0; i<L.length; i++)
  4. if(L.elem[i] == e) return i+1; //查找成功,返回序号
  5. return 0; //查找失败,返回0
  6. }
  7. //用while语句实现
  8. int LocateElem(SqList L,ElemType e){
  9. //在线性表L中查找值为e的数据元素,返回其序号(是第几个元素)
  10. int i=0;
  11. while(i<L.length && L.elem[i] != e) i++;
  12. if(i<L.length) return i+1;
  13. return 0; //查找失败,返回0
  14. }

时间复杂度:

基本操作:L.elem[i] == e,比较次数不定,取决于要查找的值 

平均查找长度ASL:

 ∴T(n)=O(n)

 8.顺序表的插入

算法思想:

  1. Status ListInsert_Sq(SqList &L, ElemType e, int i) {
  2. if (i<1 || i>L.length ) return ERROR; //i值不合法
  3. if (L.length == MAXSIZE) return ERROR; //当前存储空间已满
  4. for(int j = L.length-1; j>=i-1; j--) //j是数组下标
  5. L.elem[j+1] = L.elme[j]; //插入位置以及之后的元素后移
  6. L.elem[i-1] = e; //放入新元素,第i个下标为i-1
  7. L.length++; //表长加一
  8. return OK;
  9. }

复杂度O(n)

9.顺序表的删除

 

  1. Status ListDelete_Sq(Sq List &L, Elem Type &e,int i){
  2. if (i<1 || i>L.length) return ERROR; //i不合法
  3. e = L.elem[i-1];
  4. for(int j = i; j<=L.length-1; j++) //被删除的元素之后的元素前移
  5. L.elem[j-1] = L.elem[j];
  6. L.length--; //表长减一
  7. return OK;
  8. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/595030
推荐阅读
相关标签
  

闽ICP备14008679号