85.【C语言】数据结构之顺序表的中间插入和删除及遍历查找

目录

3.操作顺序表

1.分析中间插入函数

函数的参数

代码示例

图片分析

main.c部分改为

在SeqList.h添加SLInsert函数的声明

运行结果

2.分析中间删除函数

函数的参数

代码示例

图片分析

main.c部分改为

在SeqList.h添加SLErase函数的声明

运行结果


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

3.操作顺序表

1.分析中间插入函数

函数的参数

85.【C语言】数据结构之顺序表的中间插入和删除及遍历查找

中间的位置:结构体指针SL* ps(这样就可以使用ps->a[...])和插入的位置int pos

插入的元素数据:SLDataType x

代码示例

void SLInsert(SL* ps, int pos, SLDataType x)
{
	assert(ps);
	//pos==0为头插,pos==ps-= 0 && pos <= ps->size);
	SLCheckCapacity(ps);
	int end = ps->size - 1;
	while (pos <= end)
	{
		ps->a[end + 1] = ps->a[end];
		end--;
	}
	ps->a[pos] = x;//在a[pos]处插入新元素
	ps->size++;
}

图片分析

main.c部分改为

void TestSeqList1()
{
	SL s;
	SLInit(&s);
	SLPushBack(&s, 1);
	SLPushBack(&s, 2);
	SLPushBack(&s, 3);
	SLPushBack(&s, 4);
	SLPushBack(&s, 5);
	SLPrint(&s);
	SLInsert(&s,1,6);
	SLPrint(&s);
	SLDestory(&s);
}

在SeqList.h添加SLInsert函数的声明

运行结果

在中间插入了一个6

有了SLInsert函数可以对84.【C语言】数据结构之顺序表的头部插入和删除文章的SLPushFront函数做简化

void SLPushFront(SL* ps,SLDataType x)
{
	assert(ps);
	SLCheckCapacity(ps);
	SLInsert(ps, 0, x);
}

同理对SLPushBack函数

void SLPushBack(SL* ps, SLDataType x)
{
	assert(ps);
	SLCheckCapacity(ps);
	SLInsert(ps, ps->size, x);
}

2.分析中间删除函数

函数的参数

同中间插入函数

代码示例

void SLErase(SL* ps, int pos)
{
	assert(ps);
	assert(0 <= pos && pos < ps->size);
	int begin = pos + 1;
	while (begin < ps->size)
	{
		ps->a[begin - 1] = ps->a[begin];
		begin++;
	}
	ps->size--;
	//ps->size不用单独检查是否为负
	//在assert断言中,已经交代了pos < ps->size,pos不可能为负
}

图片分析

main.c部分改为

void TestSeqList1()
{
	SL s;
	SLInit(&s);
	SLPushBack(&s, 1);
	SLPushBack(&s, 2);
	SLPushBack(&s, 3);
	SLPushBack(&s, 4);
	SLPushBack(&s, 5);
	SLPrint(&s);
	SLErase(&s,1);
	SLPrint(&s);
	SLDestory(&s);
}

在SeqList.h添加SLErase函数的声明

运行结果

有了SLErase函数可以对84.【C语言】数据结构之顺序表的头部插入和删除文章的SLPopFront函数做简化

void SLPopFront(SL * ps)
{
	SLErase(ps, 0);
}

同理对SLPopBack函数

void SLPopBack(SL* ps)
{
	SLErase(ps, ps->size - 1);
}

3.分析遍历查找函数

代码示例

int SLFind(SL* ps, SLDataType find)
{
	assert(ps);
	for (int i = 0; i < ps->size; i++)
	{
		if (ps->a[i] == find)
			return find;
	}
	//遍历查找
	return -1;//查不到则返回-1
}

在SeqList.h添加SLFind函数的声明

版权声明:如无特殊标注,文章均来自网络,本站编辑整理,转载时请以链接形式注明文章出处,请自行分辨。

本文链接:https://www.shbk5.com/dnsj/75173.html