线性顺序表——数据结构

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//头文件

#include

#include

//预定义常量和类型:函数结果状态代码

#define OK 1

#define ERROR 0

#define TURE 1

#define FALSE 0

#define INFEASIBLE -1

#define OVERFLOW -2

//---线性表的动态分配顺序存储结构---

#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量

#define LINSTINCREMENT 10 //线性表存储空间的分配增量

//数据类型说明,其值是函数结果状态代码

typedef int Status;

typedef int ElemType;

typedef struct {

ElemType *elem; //存储空间基址

int length; //当前长度

int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位}SqList; //定义了一个线性表的数据类型

//-------函数基本操作---------

// 函数InitList的主要功能是初始化一个线性表,构造一个空的线性表L。Status InitList(SqList &L) {

L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));

if(!L.elem)

{

printf("分配失败\n");

exit(OVERFLOW); //存储分配失败

}

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

L.listsize=LIST_INIT_SIZE; //初始存储容量

return OK;

} //InitList

//函数Exist的主要功能是判断线性表L是否存在。

Status exist(SqList &L) {

if((L.elem!=NULL)&&(L.listsize>=LIST_INIT_SIZE)) //检测线性表是否存在

return OK;

else

return ERROR;

}//若线性表存在返回OK,否则返回ERROR

//函数DestroyList的主要功能是销毁线性表L。

Status DestroyList(SqList &L){

if(exist(L))//判断线性表是否存在

{

free(L.elem); //释放空间

L.elem =NULL; //将指针赋值为空

L.length=-1; //当前长度赋值为-1,标志线性表不存在

L.listsize=0; //当前最大容量赋值为0

return OK;

}

else

return ERROR;

}//成功释放空间时返回OK,否则返回ERROR

//函数ClearList的主要功能是将L重置为空表。

Status ClearList(SqList &L){

if(!(L.elem=NULL)) //重置为空表

return OK;

else

return ERROR;

}//重置线性表,成功返回OK,失败返回ERROR

//函数ListEmpty的主要功能是判断线性表是否为空表。

Status ListEmpty(SqList L) {

if(!exist(L))

return ERROR;

else

{

if(ClearList(L))

return TURE;

else

return FALSE;

}

return OK;

}

//函数ListLength的主要功能是检测线性表的数据元素个数。

Status ListLength(SqList &L){

//返回数据元素个数

if(exist(L))//判断线性表是否存在

return L.length ;//返回元素个数

else

return -1;

}//检验线性表元素个数,成功返回数字,失败返回-1.

//函数GetElem的主要功能是返回线性表中指定位置的数据元素。

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

// 线性表已存在,用e返回线性表 L中第i个元素

{

if ( exist(L) && i > 0 && i < L.length+1) //判定线性表存在和元素位置 i是否合法

{

e = L.elem[i - 1]; //将指定位置元素赋给e

return OK;

}

else

return ERROR;

}////成功返回 OK, 失败返回ERROR

//函数compare的主要功能是判断线性表中有与输入元素相同的数值,函数默认程序

compare(ElemType e1, ElemType e2)

{

if(e1==e2)

return OK; //相等,返回OK

else

return ERROR;//不相等,返回ERROR

} //函数返回值是一个执行成功与否的状态标志

//函数LocateElem的主要功能是返回满足函数compare()的数据元素位序。

int LocateElem(SqList L,ElemType e, Status(*compare)(ElemType,ElemType)){

int i;

相关文档
最新文档