线性表与13个基本操作的实现

本文详细介绍了线性表的基本概念及其13种核心操作,包括建立、清空及销毁线性表等,并通过具体代码示例展示了每种操作的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ElemType :线性表数据元素数据类型

LIST_INIT_SIZE : 线性表初始数据元素容量
INFEASIBLE :0
二、线性表结构体
typedef struct
{
ElemType *elem; //存储空间基址
int length; //当前数据元素个数
int listsize; //当前分配的最大数据元素容量
}SqList;

三、13个基本操作
建立线性表,清空线性表,销毁线性表
判空线性表,判满线性表,获得当前数据元素个数
获得指定位置的数据元素,定位符合一定条件的数据元素
获得一个数据元素的前驱,获得一个元素的后继
插入数据元素,删除数据元素
遍历线性表
1、建立线性表
初始条件:一个未初始化的线性表结构体

int InitList(SeqList &L)
{
    L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));  //申请存储空间并赋值
    if(!L.elem)//若申请所得空间为0,进入循环
    exit(0);//直接结束当前进程,也可以用return 0;
    L.length=0;//空表的长度为0
    L.listsize=LIST_INT_SIZE;//赋值最大存储量
    return 1;
 }

2、清空线性表
初始条件:线性表存在
操作结果:清空线性表(将当前元素个数赋值0,清除线性表中的元素)

int ClearList(SeqList &L)
{
    L.length=0;
    return 1;
}

3、销毁线性表
初始条件:线性表已存在
操作结果:销毁线性表

Status Destroy(SeqList &L)
{
    free(L.elem);//free函数属于头文件stdlib.h,释放存储空间,将线性表的存储空间释放掉,也就是销毁。
    L.elem=NULL;//将指针变量赋值NULL的意思就是此指针变量不指向任何地址。
    return 1;
}

4、判空线性表
初始条件:线性表存在
操作结果:线性表为空返回true,不为空返回false

bool ListEmpty(SeqList L)//不需要对线性表的成员变量进行改变,所以不使用引用
{
    return (L.length==0)?true:false;
}

5、判满线性表
初始条件:线性表存在
操作结果:若线性表已满返回true,否则返回false

bool ListFull(SqList L)
{
    return (L.length==L.listsize)?true:false;
}

6、获取线性表当前元素个数
初始条件:线性表已存在
操作结果:返回线性表当前元素个数

int ListLength(SeqList L)
{
    return L.length;
 }

7、获得指定位置的数据元素
初始条件:线性表存在
操作结果:获得指定位置的数据元素并赋值给e

int GetElem(SqList L,int i, ElemType &e)
{
    if(i<1||i>L.length)//超出范围,
    exit(0);
    e=*(L.elem+i-1);//(初始地址+i-1)即为第i个元素的地址
    return 1;
}

8、定位元素(获得符合一定条件的数据元素的位序)
初始条件:线性表已存在
操作结果:返回L中第一个与e满足关系的元素的位序,若不存在返回0
(注意:compare()表示一个关系判定函数,满足返回值为1,否则返回值为2,使用函数指针,方便调用)

int LocateElem(SqList L,ElemType e,status(*compare)(ElemType,ElemType))
{
Elem *p=L.elem; //P的初值为第一个元素的存储位置
int i=1;//i的初值为第一个元素的位序
while(i<=L.length&&!compare(*p++,e))//越界或已找到满足条件的元素
//i的最大可能值为L.length+1
{
if(i<=L.length)
return i;
else
return 0;
}

9、返回前驱
初始条件:线性表已存在,数据元素存在前驱
操作结果:查找数据元素,若线性表中有该元素且前驱存在,将前驱拷贝给一个与数据元素数据类型相同的变量;若前驱不存在,上述变量无定义

//返回前驱,equal要提前声明
Status PriorElem(SqList L,ElemType cur_e,ElemType &pre_e)
{
int a;
a=LocateElem(L,cur_e,equal);
if(!a||a==1)
{
cout<<”查找失败”<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值