数据结构笔记:顺序表

顺序表

定义

线性表的顺序存储表示(顺序映像)

特点:逻辑上相邻的元素,物理次序也相邻 即连续的存储空间

顺序表的存储结构

#defin MAXSIZE 100 //顺序表可能达到的最大长度
typedef struct{
	ElemType * elem;	//存储空间基地址
	int length; 	//当前长度
} SqList;

顺序表的基本操作

  1. 初始化

    为顺序表L动态分配一个预定义大小的数组空间,使elem指向这段空间的基地址

    将表长度设为0

    Status InitList (SqList & L){
    	L.elem = new ElemType[MAXSIZE];
    	if (!L.elem)
    		exit(OVERFLOW);
    	L.length = 0;
    
    	return OK;
    }
    
  2. 销毁

    void DestroyList(SqList & L){
      if(L.elem) delete L.elem;
    }
    
  3. 清空

    void ClearList(SqList & L){
      L.length = 0;
    }
    
  4. 顺序表的取值

    a.判断指定的位置序号i值是否合理,(1<= i <= L.length)若不合理,则返回REEOR;

    b.若i值合理,则将第i个数据元素 L.elem[i-1]赋给e,通过e返回第i个数据元素的值

    Status GetElem (SqList L,int i ,ElemType &e ){
    	if(i<1 || i>L.length)
    		return ERROR;
    	e = L.elem[i-1];
    	return OK;
    }
    

    顺序表取值的算法时间复杂度为 O(1)

  5. 顺序表的查找

    在L中查找与指定值e相同的数据元素的位置

    a.从第一个元素起,依次和e比较,若找到与e相等的元素L.elem[i] 则查找成功,返回 (i+1)

    b.未找到返回0

    int LocateElem(SqList L,ElemType e){
      for (i = 0 ; i<L.length ;i++)
        if(L.elem[i] == e)
          return i+1;
      return 0;
    }
    

    查找算法的平均时间复杂度为 O(n)

  6. 顺序表的插入

    a.判断插入位置是否合理(1<=i<=n+1),不合法返回REEOR

    b.判断是否已满,满则返回REEOR

    c.将第n个至第i个位置元素依次后移,空出第i个位置

    d.将新元素e放入第i个位置

    e.表长加一

    Status ListInsert(Sqlist & L,int i,ElemType e){
    	if (i<1 || i>L.length+1)
    		return ERROR;
    	
    	if(L.length == MAXSIZE)
    		return ERROR
    
    	for (j = L.length-1; j >=i-1; j--)
    		L.elem[j+1] = L.elem[j];		//从最后一个元素开始后移至第i个结束
    	
    	L.elem[i-1] = e;
    	++L.length;
    	return OK;
    }
    

    插入算法的平均时间复杂度为O(n)

  7. 顺序表的删除

    a.判断删除位置i是否合法,(1<i<n)若不合法返回REEOR

    b.将第i+1个至n个元素依次向前移动一个位置

    c.表长加一

    Status ListDelete (Sqlist & L,int i){
    	if(i<1 || i>L.length)
    		return ERROR;
    	for(j<1;j<=L.length-1;j++)
    		L.elem[j-1] = L.elem[j];
    	--L.length;
    	return OK;
    }
    

    删除的平均时间复杂度为O(n)

总结

  1. 顺序表的特点:以物理位置相邻表示逻辑关系
  2. 顺序表的优点:任意元素之间可随机存取
  3. 顺序表的缺点:进行插入和删除需要移动大量元素
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页