84.【C语言】数据结构之顺序表的头部插入和删除

目录

3.操作顺序表

1.分析头部插入函数

SeqList.c写入

容量检查函数

注意

main.c改为

SeqList.h添加SLPushFront的声明

运行结果

2.分析头部删除函数

SLPopFront代码

main.c改为

SeqList.h添加SLPopFront的声明

图分析

运行结果


承接83.【C语言】数据结构之顺序表的尾部插入和删除文章

3.操作顺序表

1.分析头部插入函数

SeqList.c写入

cpp 复制代码
void SLPushFront(SL* ps,SLDataType x)
{
	assert(ps);
	SLCheckCapacity(ps);
	int end = ps->size-1;//定义尾部,一开始a[end-1]指向最后一个元素
	while (end >= 0)//注意循环条件
	{
		ps->a[end + 1] = ps->a[end];
		end--;
	}
	ps->a[0] = x;
	ps->size++;
}

容量检查函数

cpp 复制代码
void SLCheckCapacity(SL* ps)
{
	assert(ps);
	if (ps->size == ps->capacity)
	{
		SLDataType* tmp = (SLDataType*)realloc(ps->a, sizeof(SLDataType) * ps->capacity * 2);
		if (tmp == NULL)
		{
			perror("realloc");
			return;//错误返回
		}
		ps->capacity *= 2;
		ps->a = tmp;
	}
}

注意

头插时,元素会逐个向后移动,因此要先进行容量检查,再移动元素,最后不要忘记为有效元素个数size+1;

main.c改为

cpp 复制代码
#include "SeqList.h"
//定义测试顺序表的函数
void TestSeqList1()
{
	SL s;
	SLInit(&s);
	SLPushBack(&s, 1);
	SLPushBack(&s, 2);
	SLPushBack(&s, 3);
	SLPushBack(&s, 4);
	SLPrint(&s);
	SLPushFront(&s, 1);
	SLPrint(&s);
	SLDestory(&s);
}

int main()
{
	TestSeqList1();
	return 0;
}

SeqList.h添加SLPushFront的声明

运行结果

头插N个元素的时间复杂度为,运行效率不高,尽量避免头插,使用尾插(尾插N个元素的时间复杂度为)

2.分析头部删除函数

SLPopFront代码

cpp 复制代码
void SLPopFront(SL * ps)
{
	assert(ps);
	assert(ps->size);
	int begin = 1;
	while (begin < ps->size)
	{
		ps->a[begin - 1] = ps->a[begin];
		begin++;
	}
	ps->size--;
}

注:ps->size可能为负数,因此要断言ps->size的正负

main.c改为

cpp 复制代码
void TestSeqList1()
{
	SL s;
	SLInit(&s);
	SLPushBack(&s, 1);
	SLPushBack(&s, 2);
	SLPushBack(&s, 3);
	SLPushBack(&s, 4);
	SLPushBack(&s, 5);
	SLPrint(&s);
	SLPopFront(&s);
	SLPrint(&s);
	SLDestory(&s);
}

SeqList.h添加SLPopFront的声明

图分析

运行结果

相关推荐
李少兄5 分钟前
【java基础】Java 中的继承
java·开发语言
m0_7482365820 分钟前
Java高级开发进阶教程之系列
java·开发语言
奔跑吧邓邓子23 分钟前
【Python爬虫(80)】当Python爬虫邂逅边缘计算:探索数据采集新境界
开发语言·爬虫·python·边缘计算
沐雲小哥30 分钟前
C++ 八股(整理记录)
开发语言·c++
C嘎嘎嵌入式开发34 分钟前
C++之vector和list辨析
开发语言·c++·算法
arong_xu1 小时前
欧拉回路与哈密尔顿回路: Fleury算法与Hierholzer 算法(C++)
开发语言·c++·算法
吃瓜市民1 小时前
剑指offer - 面试题11 旋转数组的最小数字
数据结构·c++·算法·二分法
hrrrrb1 小时前
【Java】I/O 流篇 —— 缓冲流
java·开发语言
DARLING Zero two♡1 小时前
【初阶数据结构】星河中的光影 “排” 象:排序(下)
数据结构·c++·排序算法·归并排序·快速排序
迷迭所归处1 小时前
C语言 —— 此去经年 应是良辰好景虚设 - 函数
c语言