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;

    }

  • 相关阅读:
    POJ 3261 Milk Patterns (求可重叠的k次最长重复子串)
    UVaLive 5031 Graph and Queries (Treap)
    Uva 11996 Jewel Magic (Splay)
    HYSBZ
    POJ 3580 SuperMemo (Splay 区间更新、翻转、循环右移,插入,删除,查询)
    HDU 1890 Robotic Sort (Splay 区间翻转)
    【转】ACM中java的使用
    HDU 4267 A Simple Problem with Integers (树状数组)
    POJ 1195 Mobile phones (二维树状数组)
    HDU 4417 Super Mario (树状数组/线段树)
  • 原文地址:https://www.cnblogs.com/YuanYe1/p/5043512.html
Copyright © 2011-2022 走看看