数据结构线性表(顺序存储结构)

本文详细介绍了线性表的基础知识,包括线性表的定义、抽象数据类型的操作(如初始化、获取元素、插入和删除),以及顺序存储结构中这些操作的具体实现。
摘要由CSDN通过智能技术生成

目录

1.线性表基础知识

2.线性表的抽象数据类型

3.顺序存储结构的插入与删除


1.线性表基础知识

1.线性表是什么?

线性表:零个或多个数据元素的有限序列。                                                                

2.线性表的顺序存储结构 

指的是用一段地址连续的存储单元依次存储线性表的数据元素。

代码:

#define MAXSIZE 20            //存储空间的初始分配量

/*define在此处的作用是将MAXSIZE与20联结起来,联结起来之后,编译器在预处理程序时,会将程序中所有的MAXSIZE用20来替换 */
                              

typedef int ElemType        //typedef的作用是定义一个类型的别名
                            //在此处,typedef的作用是定义int的别名为ElemType  
                            //那么 int data;等价于 ElemType data;  
         
typedef struct{

    Elemtype data[MAXSIZE];        //数组,存储数据元素

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

}SqList;

2.线性表的抽象数据类型

Operation
    
    InitList(*L):初始化操作,建立一个空的线性表L;

    ListEmpty(L):若线性表为空,返回true,否则返回false;

    ClearList(*L):将线性表清空;

    GetElem(L,i,*e):将线性表L中的第i个位置元素值返回给e;

    LocateElem(L,e):将线性表L中查找与给定值e相等的元素,如果查找成功,返回该元素在表中序号;否则,返回0,代表失败;

    ListInsert(*L,i,e):在线性表L中的第i个位置插入新元素e,线性表长度加1;

    ListDelete(*I,i,*e):删除线性表L中第i个元素位置,并用e返回其值,线性表长度减1;

    ListLength(L):返回线性表L的元素个数;

endADT

3.顺序存储结构的插入与删除

1.获得元素操作

代码:

#define OK 1

#define ERROR 0

typedef int Status;    //Status是函数的类型,其值是函数结果状态代码,如OK,ERROR等

/* 初始条件:顺序线性表L已存在,1<=i<=ListLength(L) */

// 操作结果:用e返回L中第i个数据元素的值,i是指位置,第1个位置的数组是从0开始

Status GetElem(SqList L, int i, ElemType *e)    /* ElemType的含义就是“数据元素的类型”,代表
所有可能的数据类型,简单明了的概括了整体。 在算法中,除了特别的说明外,规定了ElenType默认是int型 */

{

    if(L.length==0 || i<1 || i>L.length)    //线性表为空或者想要获取元素的位置不合法

        return ERROR;

    *e=L.data[i-1];    //下标从0开始,第i个元素,下标为i-1

    return OK;

}

2.插入操作

//初始条件:线性表已存在,1<=i<=ListLength(L)

//操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1

Status ListInsert(Sqlist *L,int i,ElemType e)

{

    int k;

    if(L->length==MAXSIZE)    //代表线性表容量已满

        return ERROR;

    if(i<1 || i>L->length+1)    //当i比第一位位置小或者比最后一位位置后一位置还要大

        return ERROR;

    if(i<=L->length)        //可以等于是因为可以插入在线性表的最后一位

    {

        for(K=L->length-1;k>=i;k--)    //要插入的第i个元素下标为i-1

                                       //将要插入的元素位置后的元素全部向后移一位


    }

    L->data[i-1]=e;        //新元素插入

    L->length++;

    return OK;


}

3.删除操作

代码:

//初始条件:顺序线性表L已存在,且1<=i<=ListLength(L)

//操作结果:删除L的第i个数据元素,并用e返回其值,L的长度需减1

Status ListDelete(SqList *L, int i,ElemType *e)

{

    int k;

    if(L->length==0)        //线性表为空

        return ERROR;

    if(i<1 || i>L->length)        //删除的位置不合法

        return ERROR;

    *e=L->data[i-1];

    if(i<L->length)            //如果删除的位置不是最后一个

    {

        for(k=i;k<L->length;k++)

            L->data[k-1]=L->data[k];        //被删除元素的后继元素位置全部前移

    }

    L->lenght--;

    return OK;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值