线性表(一)--顺序存储结构

线性表(List):零个或多个数据元素的有限序列。
线性表的抽象数据类型:

ADT 线性表(List)
Data
    线性表的数据对象集合为(a1,a2,......,an),每个元素的类型均为DataType。其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个直接后继元素。数据元素之间的关系是一对一关系。
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。
    ListDelete(*L,i,*e):删除线性表L中的第i个位置元素,并用e返回其值。
    ListLength(L):返回线性表L的元素个数。
endADT

线性表的顺序存储结构代码:

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 50

typedef int ElemType;
typedef int Status;
typedef struct{
    ElemType data[MAXSIZE];
    int length;
}SqList;

说白了,线性表的顺序存储结构就三个属性:

1.存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置。
2.线性表的最大存储容量:数组长度MAXSIZE。
3.线性表的当前长度:length。

注: 数组的长度是存放线性表的存储空间的长度,也可以理解为线性表的最大长度;而线性表的长度是线性表中数据元素的个数。线性表的长度应小于或等于数组长度。


线性表的初始化,也就是将线性表长度置为0:

//初始化线性表
Status InitList(SqList *L){
    L->length=0;
    return OK;
}

查找线性表中第i个元素,并返回值给e:

//查找线性表中第i个元素,并返回值给e
Status GetElem(SqList L,int i,ElemType *e){
if(L.length==0||i<0||i>L.length)
        return ERROR;
    *e=L.data[i-1];
    return OK;
}

查找线性表中与e值相等的元素的位置(第i个元素):

//查找线性表中与e值相等的元素的位置(第i个元素)
int LocateElem(SqList L,ElemType e){
    int i;
    if(0==L.length)
        return ERROR;
    for(i=1;i<=L.length;i++){
        if(e==L.data[i-1])
        return i;
        else return ERROR;
    }
}

判断线性表是否为空:

//判断线性表是否为空
bool ListEmpty(SqList L){
    if(L.length==0)
        return TRUE;
    else return FALSE;
}

在线性表中第i个位置插入元素:

//在线性表中第i个位置插入元素
Status ListInsert(SqList *L,int i,ElemType e){
    int k;
    if(L.length==MAXSIZE||i<0||i>L.length+1)
        return ERROR;
    for(k=L.length;k>=i;k--){
        L.data[k]=L.data[k-1];
    }
    L.data[i-1]=e;
    return OK;
}

删除线性表的第i个元素,并用e返回其值:

//删除线性表的第i个元素,并用e返回其值
Status ListDelete(SqList *L,int i,ElemType *e){
    int k;
    if(L.length==0||i<0||i>L.length)
        return ERROR;
    *e=L.data[i-1];
    for(k=i;k<L.length;k++){
        L.data[k-1]=L.data[k]
    }
    return OK;
}

线性表的优缺点:

优点:1.无须为表示表中元素之间的逻辑关系而增加额外的存储空间。
     2.可以快速地存取表中任一位置的元素。
缺点:1.插入和删除操作需要移动大量元素。
     2.当线性表长度变化较大时,难以确定存储空间的容量。
     3.造成存储空间的“碎片”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值