C++,顺序表的添加,插入,删除

顺序表是简单的线性结构,类似数组,元素逻辑相邻且存储也相邻。它支持在尾部添加、插入和删除元素。在需要遍历大量元素然后剔除部分元素的场景下,顺序表能提高效率。文章介绍了如何创建、操作(添加、插入、删除)及销毁顺序表。

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

什么是顺序表?

顺序表是一种简单的线性结构,他和我们之前使用的数组非常相似,在逻辑上相邻的数据在存储位置上也是相邻的,数据之间一个挨着一个,中间不允许有空值,可以在尾部添加元素,插入元素,删除元素.

顺序表有三个要素:

typename *elems; 用来表示记录存储位置的基地址,

int length; 表示存储的元素个数,

int size; 为顺序表分配的一段可连续存储的空间,

但是我们为什么要使用顺序表?在计算机的一些应用场合,当我们需要遍历大量的元素,但遍历完之后某些元素就不再需要的时候,我们可以使用它把当中的某些元素剔除掉,这样就可以减少对元素遍历的次数,提高效率.

那我们该怎么用顺序表呢?

首先我们构建一个顺序表结构体

typedef struct {
	int* elems;//下标从0数起
	int length;
	int size;
}SqList;

它的常用的几个功能是:尾部添加元素,插入元素,删除元素

//1.尾部添加元素
bool listAppend(SqList& list, int e) {
	if (list.length == list.size)return false;

	list.elems[list.length] = e;
	list.length++;
	return true;
}



//2.插入元素 
bool listInsert(SqList& list, int i, int e) {

	if (i<0 || i>=list.length)return false;
	if (list.length == list.size)return false;

	for (int j = list.length - 1; j >= i; j--) {
		list.elems[j + 1] = list.elems[j];
	}

	list.elems[i] = e;//将新元素插入
	list.length++;	  //元素增加1
	return true;
}




//3.删除元素
bool listDelete(SqList& list, int i) {
	if (i < 0 || i >= list.length)return false;

	//最后一个元素
	if (i == list.length - 1) {
		list.length--;
		return true;
	}
	else {

		for (int j = i; j < list.length - 1; j++) {
			list.elems[j] = list.elems[j + 1];//在删除元素位置的后续元素依次往前移
		}

		list.length--;
		return true;
	}
}

需要注意的是,在往中间插入一个元素的时,该位置往后的连续元素都要相应的往后移动一个元素的位置,所以我们得先把最后面的元素往后移动一个元素位置,前面的元素再依次的往后移动;同样的,删除元素的时候,中间就出现了一个空的位置,此时后面的元素也要相应的往前移动.

最后,该顺序表的使用周期结束后,要记得销毁顺序表,使用delete释放初始化时分配的new的内存!

//4.销毁顺序表
void destoryList(SqList& list) {

	if (list.elems) delete[] list.elems;
	list.length = 0;
	list.size = 0;
}

今天的分享就到这里了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值