顺序表常见操作


顺序表:
      顺序表是用一段物理地址的存储单元一次存储数据元素的线性结构,一般情况下采用“数组存储”,在数组上完成数据的增删查改。
头插  尾插   头删  尾删
void SeqlistPushBack(PSeq ps, DataType data)//尾插
	{
		assert(ps);//保证顺序表存在
		ps->_array[ps->_size] = data;//把增加的数字放到size位置
		ps->_size++;//把size往后移一位
	}
	void SeqListPopback(PSeq ps)//尾删
	{
		assert(ps);
		if (SeqListEmpty(ps))
			return;//删除时判断顺序表是否为空
		ps->_size--;//只需size往前走,覆盖最后一个有效元素
	}
	void SeqlistPushFront(PSeq ps, DataType data)//头插
	{
		assert(ps);
		for (int i = ps->_size - 1; i >= 0; i--)//将顺序表中所有元素往后搬移一位
		{	                     //从size-1开始
			ps->_array[i + 1] = pa->_array[i];//把i搬到i+1的位置
		}
		ps->_array[0] = data;//插入元素从0位置开始
		ps->_size++;//更新size的位置
	}
	void SeqListPopFront(PSeq ps)//头删
	{
		if (SeqListEmpty(ps))//删除时判断顺序表是否为空
			return;
		for (int i = 1; i < ps->_size; i++)//
		ps->_array[i - 1] = ps->_array[i];
		ps->_size--;
	}
 
	void SeqListInsert(PSeq ps, int pos, DataType data)//任意位置的插入
	{
		assert(0);
		if (pos<0 || pos>ps->_size)//pos位置比较特殊,不能进行插入
			return;
		CheckCapacity(ps);
		for (int i = ps->_size - 1; i > pos; i--)
			ps->_array[i + 1] = ps->array[i];
		ps->_array[pos] = data;
		ps->_size++;
	}
	void SeqListErase(PSeq ps, int pos)//任意位置的删除
	{
		assert(ps);
		if (pos < 0 || pos >= ps->_size)
			return;
		for (i=pos+1;i<ps->_size;i--)
			ps->_array[i - 1] = ps->_array[i];
		ps->_size--;
			

	}
	int SeqListFind(PSeq ps, int pos, DataType data)//元素的查找
	{
		assert(ps);
		for (int i = 0; i < ps->_size; i++)
		{
			if (ps->_array[i] == data)
				return i;
		}
		return -1;

	}
	int SeqLIstSize(PSeq ps)//有效元素的个数
	{
		assert(ps);
		return ps->_size;
	}
	int SeqListCapacity(PSeq ps)//容量
	{
		assert(ps);
		return ps->_capacity;

	}
	void SeqListClear(PSeq ps)//清空有效元素
	{
		assert(ps);
		ps->_size = 0;

	}

	void SeqLIstRomve(PSeq ps, DataType data)
	{
		SeqListErase(ps.SeqListFind(ps, data));//找到该元素,再删除
	}

	void CheckCapacity(PSeq ps)//扩容 ,一般扩大两倍
	{
		assert(ps);
		if (ps->_size == ps->_capacity)//有效元素的个数等于总的容量需要扩容
		{
			int newCapacity = ps->capacity * 2;//申请新空间
			int* pTmp = (DataType*)malloc(newCapacity * sizeof(DataType));
			                    //临时空间大小 ——每个元素占datatype个字节
			if (NULL == pTmp)//判断空间是否申请成功
			{
				assert(0);
				return;
			}
			for (int i = 0; i < ps->_size; i++)//拷贝旧空间中的元素
				pTmp[i] = ps->_array[i];
			free(ps->_array);//释放旧空间
			ps->_array = pTmp;//更新参数
			ps->_capacity = newCapacity;
		}

	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

记得多喝热水…

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

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

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

打赏作者

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

抵扣说明:

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

余额充值