数据结构与算法学习笔记(四)

本文介绍了顺序表作为线性数据结构的基础概念,它通过数组存储元素并按顺序访问。顺序表提供了插入和删除操作,但效率较低,特别是在频繁操作时。为了优化,文章中的实现包含了一个resizeList函数,用于动态调整数组长度。当元素数量达到数组长度的1/4或3/4时,会自动扩展或缩小数组。尽管效率问题使得顺序表在实践中可能被链表等其他数据结构取代,但其简单的实现仍有学习价值。

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

1.顺序表

顺序表是一种线性数据结构,使用数组来存储数据元素,并按照从前往后的顺序依次存储。在顺序表中,每个数据元素都通过一个整数下标来访问,第一个元素的下标为 0,最后一个元素的下标为 n-1,其中 n 表示顺序表中元素的总数。

个人理解:

一般情况下,数组就相当于顺序表,收集数据并记录存储到数组中。

顺序表制作形式有很多,本人的顺序表是先由构造函数规定长度,再根据输入的数据个数进行扩展数组或减少数组长度。

template <class T>
class Sequencelist
{
public:
	T* eles;

	int N=0;

	int len;

	Sequencelist(int capacity)
	{
		eles = new T[capacity];

		N = 0;                 //当前数组元素个数

		len = capacity;        //当前数组总可以存入元素个数(长度)
	}

重新规划数组长度函数

void resizeList(int len)
	{
		this->len = len;

		T* temp = eles;

		eles = new T[len];

		for (int i = 0; i < N; i++)
		{
			eles[i] = temp[i];
		}
		
	}

尾部增添

void insert(T t)
	{
		if (N >= len / 4)
		{
			resizeList(2 * N);
		}

		eles[N++] = t;
	}

插入增添

void insert(int i, T t)
	{
		if (N == len)
		{
			resizeList(2 * N);
		}

		for (int j = N-1; j > i; j--)     //插入之前先让插入位往后的数往后移动,让出位置插入
		{
			eles[j] = eles[j - 1];
		}

		eles[i] = t;
	}                                

索引查找删除

T remove(int i)
	{
		T temp = eles[i];
		for (int j = i; j < N-1; j++)
		{
			eles[j] = eles[j + 1];            //并不完完全全的删除,只是认为有空位,让全部
		}                                     //删除位置后的元素往前移动覆盖
		N--;

		if (N < len / 4)
		{
			resizeList(len / 2);
		}

		return temp;
	}

由于顺序表的内存开销较大,并且插入删除操作的效率较低,因此在实际应用中,顺序表通常会被替代为其他更高效的数据结构。

比如链表(数据结构与算法学习笔记(三)_loser_omo的博客-优快云博客

但是简单,就是对数组的一些操作。(感觉这篇在水一样)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值