zoukankan      html  css  js  c++  java
  • D_S 线性表的顺序表示和实现

    线性表的顺序表示又称为顺序存储结构或顺序映像

    顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构,简言之,逻辑上相邻,物理上也相邻

    顺序存储方法:用一组地址连续的存储单元依次存储线性表的元素,可通过数组V[n]来实现

    顺序表的类型定义:

    #define  MAXSIZE 100     //最大长度

    typedef  struct {

      ElemType  *elem;     //指向数据元素的基地址

      int  length;          //线性表的当前长度                                                     

     }SqList;

    初始化线性表L (参数用引用)

    Status InitList_Sq(SqList &L){    //构造一个空的顺序表L

        L.elem=new ElemType[MAXSIZE];   //为顺序表分配空间

        if(!L.elem) exit(OVERFLOW);       //存储分配失败

        L.length=0;    //空表长度为0

        return OK;

    }

    初始化线性表L (参数用指针)

    Status InitList_Sq(SqList *L){    //构造一个空的顺序表L

        L-> elem=new ElemType[MAXSIZE];   //为顺序表分配空间

        if(! L-> elem) exit(OVERFLOW);       //存储分配失败

        L-> length=0;                  //空表长度为0

        return OK;

    }

    销毁线性表L

    void DestroyList(SqList &L){

      if (L.elem) delete[]L.elem;    //释放存储空间

    }

    清空线性表L

    void ClearList(SqList &L) {

       L.length=0;                //将线性表的长度置为0

    }

    求线性表L的长度

    int GetLength(SqList L){

       return (L.length);            

    }

    判断线性表L是否为空

    int IsEmpty(SqList L){

      if (L.length==0) return 1;     

       else return 0;

    }

    获取线性表L中的某个数据元素的内容

    //根据指定位置,获取相应位置数据元素的内容

    int GetElem(SqList L,int i,ElemType &e){

      if (i<1||i>L.length) return ERROR;  

       //判断i值是否合理,若不合理,返回ERROR

      e=L.elem[i-1];   //第i-1的单元存储着第i个数据

      return OK;

    }

    在线性表L中查找值为e的数据元素

    int LocateELem(SqList L,ElemType e)

    {

      for (i=0;i< L.length;i++)

          if (L.elem[i]==e) return i+1;               

      return 0;

    }

    在线性表L中第i个数据元素之前插入数据元素e

    Status ListInsert_Sq(SqList &L,int i ,ElemType e){

       if(i<1 || i>L.length+1) return ERROR;           //i值不合法

       if(L.length==MAXSIZE) return ERROR;    //当前存储空间已满    

       for(j=L.length-1;j>=i-1;j--)

           L.elem[j+1]=L.elem[j];    //插入位置及之后的元素后移

        L.elem[i-1]=e;                     //将新元素e放入第i个位置

      ++L.length;         //表长增1

      return OK;

    }

    将线性表L中第i个数据元素删除

    Status ListDelete_Sq(SqList &L,int i,ElemType &e){

       if((i<1)||(i>L.length)) return ERROR;  //i值不合法

       e=L.elem[i-1];                              //将欲删除的元素保留在e中

      for (j=i;j<=L.length-1;j++)                  

        L.elem[j-1]=L.elem[j];       //被删除元素之后的元素前移 

       --L.length;                       //表长减1

      return OK;

    }

  • 相关阅读:
    有爱,有期待——开启囤货模式(一)
    我们都爱你,悠悠球少年
    三月随笔——漫长的等待
    奢侈的休闲度假时光——带着小样儿去三亚(三)
    这个夏天,飞到北纬18°去玩海——带着小样儿去三亚(二)
    一场说走就走的旅程——带着小样儿去三亚(一)
    获取URL的参数-详解如何获取(自己写的,实测有效)
    背景图自适应
    百家姓
    判断是手机端还是PC端的代码
  • 原文地址:https://www.cnblogs.com/YuanYe1/p/5043512.html
Copyright © 2011-2022 走看看