顺序表的基本概念和代码详解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

顺序标的基本概念和代码详解

1.基本概念

在这里插入图片描述
在这里插入图片描述
也就是说顺序表在结构和逻辑上都连续。>>>典型的数组结构
不允许其中有空的地址,未存取数据

2.结构体定义

2.1 顺序表静态存储

在这里插入图片描述
静态特点:如果满了就不让插入 缺点:给多少的合适呢?这个很难确定
N给小了不够用,N给大了浪费

2.2 顺序表动态存储

// 动态顺序表
typedef int SLDataType;//如果数据类型不为int,方便随时变更

typedef struct SeqList
{
   
	SLDataType* a;  //可以采用relloc扩容,指向存储数据的空间
	int size;      // 表示数组中存储了多少个数据
	int capacity;  // 数组实际能存数据的空间容量是多大 
}SL;

注意:顺序表都是存储在结构体的SLDataType* a的这份空间中的,有relloc来开辟。
这份空间估且叫A空间吧,A空间在申请时,不够会一次申请n个字节,所以其容量和有效数据的个数不等。决定当前顺序表有多少个有效数据的为结构体的size的值。

3.顺序表的初始化、增删改查、和检测容量并扩容等重要功能。

3.1 顺序表初始化

为什么需要这个呢?这个对于顺序表动态存储来使用的,因为动态可以采用relloc扩容,然后在扩容时(SeqListCheckCapacity()函数中),根据扩容的空间给ps->size和ps->capacity赋值,进入扩容之前,以初始化的 ps->a = NULL; ps->size = ps->capacity = 0;为前提来执行后面的逻辑的。
这样:所有任意长度的数据都可以采用初始化。
在这里插入图片描述

void SeqListInit(SL* ps)
{
   
	ps->a = NULL;
	ps->size = ps->capacity = 0;
}

3.2 顺序表检测容量并扩容

void SeqListCheckCapacity(SL* ps)
	
{
   
	// 如果没有空间或者空间不足,那么我们就扩容
	if (ps->size == ps->capacity)
	{
   
		//初始化后,第一次进入时,capacity=size=0
		//容量满了,capacity=size  不等于0

		int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
		//当第一次进入时,容量赋值为4,之后如果容量不满了,容量扩容为原来的2倍
		
		SLDataType* tmp = (SLDataType*)realloc(ps->a, newcapacity*sizeof(SLDataType));
		//realloc申请的地址类型为char*  以字节为单位
		if (tmp == NULL)
		{
   
			printf("realloc fail\n");
			exit(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值