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

来源:互联网 发布:java加载类的过程 编辑:程序博客网 时间:2024/06/06 19:30

线性表(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 50typedef 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个元素,并返回值给eStatus 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.造成存储空间的“碎片”。

1 0