第一章之线性表(一)顺序表示

目录

一维数组静态分配

一维数组动态分配

在顺序表L的第i(1≤i≤L.length+1)个位置插入新元素e

删除顺序表L中第i(1≤i≤L.length)个位置的元素

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


一维数组静态分配

#define MAXSIZE 50   //线性表的最大长度
typedef struct {
	ElemType data[MAXSIZE]; //顺序表的元素
	                        //ElemType是由typedef定义的数据元素的类型
	int length;             //顺序表的当前长度
}SqList;                    //使用typedef重新定义的顺序表的类型

一维数组动态分配

#define InitSize 100    //表长的初始定义
typedef struct {
	ElemType* data; //指示动态分配数组的指针
	                //ElemType是由typedef定义的数据元素类型
	int length,     //顺序表的当前长度
		MaxSize;    //动态数组的最大容量
}SqList;            //使用typedef重新定义的顺序表的类型

//动态分配空间
L.data = (ElemType*)malloc(InitSize * sizeof(ElemType));

在顺序表L的第i(1≤i≤L.length+1)个位置插入新元素e

/*
* 将元素e插入到顺序表L中位序i的位置
*/
bool ListInsert(SqList &L, int i,ElemType e){
	//下表[1, L.length + 1]合法
	if ( i < 1 || i > L.length + 1) {
		return false;
	}

	//当前存储空间已满,不能插入
	if (L.length >= MaxSize)
		return false;

	//移位
	for (int j = L.length; j >= i; j--) {
		L.data[j] = L.data[j - 1];
	}

	//插入
	L.data[i - 1] = e;
	//表长+1
	L.length++;

	return true;
}

删除顺序表L中第i(1≤i≤L.length)个位置的元素

/*
* L:线性表
* i:待删除元素在线性表的位置
* e:记录删除元素的数据,通过引用返回
*/
bool ListdDelete(SqList &L, int i, ElemType &e) {
	//非法判断
	if ( i < 1 || i > L.length) {
		return false;
	}

	//取出需要删除的元素的数据
	e = L.data[i - 1];

	//移位
	for (int j = i; j < L.length; j++) {
		L.data[j - 1] = L.data[j];
	}

	//长度减一
	L.length--;
	return true;
}

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

/*
* 查找顺序表中值为e的元素,如果查找成功,返回元素位序,否则返回0
*/
int LocateElem(SqList L, ElemType e) {
	int i;
	for (i = 0; i < L.length; ++i) {
		if (L.data[i] == e) {
			//位序与下标有1的差距
			return i + 1;
		}
	}

	//查找失败
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

少校0778

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

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

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

打赏作者

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

抵扣说明:

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

余额充值