线性顺序表——数据结构
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;