顺序表的基本操作之插入,删除与查找

本文介绍了顺序表的基本操作,包括在指定位置插入元素、删除元素以及查找元素的方法。在插入操作中,通过判断插入位置的合法性与存储空间是否足够来确保操作成功。删除操作则涉及元素的移动和长度减一。查找操作分为静态和动态两种分配方式,返回指定位置的元素值。这些基本操作对于理解和实现线性表至关重要。
摘要由CSDN通过智能技术生成

数据结构学习:顺序表的基本操作之插入,删除与查找

在顺序表当中插入元素
ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e
插入位置后面的元素一次向后移动一位
首先我们要先定义一个顺序表结点结构体

#define MaxSize 10 //定义最大长度
typedef struct{
	int data[MaxSize];	//采用静态数组来存放数据元素,ElemType为数据类型in
	int length;			//顺序表的当前长度
}SqList;				//定义结构体顺序表的名称为SqList

初始化完线性表后,接下来就可以进行插入了

//插入元素
void ListInsert(SeqList &L, int i, int e)//在表L的第i个位置插入元素e
{
	for(int j = L.length; j >= i; j--)
		L.data[j] = L.data[j-1];//i后面的元素全部向后移动一位
	L.data[i-1] = e;	//在位置i出插入元素e
	L.length++;			//顺序表长度增加1
}

但是这个插入位置存在争议,如果插入的位置不合法该怎么办?
对代码进行一些修改,判断是否可以插入

//插入元素
bool ListInsert(SeqList &L, int i, int e)//在表L的第i个位置插入元素e
{
	if(i < 1 || i > L.length + 1)	//判断i的范围是否合法
		return false;
	if(L.length >= MaxSize)			//当前的存储空间已满,不能继续插入
		return false;
	//都合法后开始插入
	for(int j = L.length; j >= i; j--)
		L.data[j] = L.data[j-1];//i后面的元素全部向后移动一位
	L.data[i-1] = e;	//在位置i出插入元素e
	L.length++;			//顺序表长度增加1
	return true;
}

在主函数里调用则是:

int main()
{
	SqList L;			//声明一个顺序表
	InitList(L);		//初始化顺序表
	ListInsert(L,3,3);  //在顺序表L第3个位置插入元素3
   return 0;
}

线性表基本操作——删除
ListDelete(&L,i,&e):删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值

//删除元素
bool ListDelete(SqList &L, int i, int &e)
{
	if(i < 1 || i > L.length) 	//判断删除位置i的范围是否合法
		return false;
	e = L.data[i-1];		//将删除的元素赋值给e
	for(int j = i; j<L.length; j++)		//删除位置后的元素全部向前移动一位
		L.data[j-1] = L.data[j];
	L.length--;				//线性表长度-1
	return true;
}

顺序表的基本操作之查找
GetElem(L,i):按位查找操作。获取表L中第i个位置的元素的值。

静态分布查找

#define MaxSize 10 //定义最大长度
typedef struct{
	ElemType data[MaxSize]; //用静态的“数组”存放数据元素
	int length; //顺序表的当前长度
}SqList; //顺序表的类型定义(静态分配方式)

ElemType GetElem(SqList L, int i){
	return L.data[i-1];//第i个元素的数组下标为i-1
}

动态分配查找

#define InitSize 10 //顺序表的初始长度
typedef struct{
	ElemType *data; //指示动态分配数组的指针
	int MaxSize; //顺序表的最大容量
	int length; //顺序表的当前长度
} SeqList; //顺序表的类型定义(动态分配方式)

ElemType GetElem(SeqList L, int i){
return L.data[i-1];
}

LocateElem(L,e):按值查找操作。在表L中查找具有给定关键字值的元素。

int LocateElem(SeqList L,ElemType e){
	for(int i=0;i<L.length;i++)
		if(L.data[i]==e)-
			return i+1; //数组下标为i的元素值等于e,返回其位序i+1
	return 0; //退出循环,说明查找失败
}

//在顺序表L中查找第一个元素值等于e的元素,并返回其位序

int LocateElem(SeqList L,ElemType e){
	for(int i=0;i<L.length;i++)
		if(L.data[i]==e)
			return i+1; //数组下标为i的元素值等于e,返回其位序i+1
		return 0; //退出循环,说明查找失败
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小二康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值