线性表的学习

学习目标:

线性表的实现

学习目录:

  • 线性表的初始化
  • 线性表的插入
  • 线性表的一些其他简单功能

线性表的初始化

typedef int E;

struct content
{
	E* arr;
	int capacity;
	int size;
};

int init_list(struct content* m)
{
	m->arr = malloc(sizeof(int) * 10);
	if (m->arr == NULL) return 0;
	m->capacity = 10;
	m->size = 0;
}

解释结构体里的一些数据的作用

E*arr --------------> 目的是开辟一块空间,E的使用是为了后期更改数组类型的方便
capacity-----------> 目的是控制数组的最大空间
size ---------------->目的是了解当前数据存储的位置

对照每一个数据的作用,初始化中的代码将很容易读懂,不再赘述解释

线性表的插入

int insert(struct content* m,int index,int elem)
{
	if (index <1 || index > m->size + 1) return 0;
	if (m->capacity == m->size)
	{
		int newcapacity = m->capacity + (m->capacity >> 1);
		realloc(m->arr, newcapacity * sizeof(E));
	}
	for (int i = m->size;i > index - 1;i--)
	{
		m->arr[i + 1] = m->arr[i];
	}

	m->arr[index - 1] = elem;
	m->size++;
}

解释参数
第一个是一个结构体的指针
第二个是要插入的位置
第三个是要插入的元素

解释代码
第一个if 语句是为了判断index的合法性

第二个if 语句是判断数组是否满了,如果满了将申请一块更大的空间来存放

库函数 realloc 知识的补充
在这里插入图片描述

for循环的目的

将要插入的元素位置后面的元素后移

for 循环结束后将index位置赋值给想要的值

这里的数据变常了,所以size ++;

线性表的删除指定位置的元素

int delet(struct content* m, int index)
{
	if (index > m->size) return 0;
	for (int i = index;i < m->size - 1;i++)
	{
		m->arr[i] = m->arr[i + 1];
	}
}

基本逻辑与插入相同,唯一不同的地方是,移动方向变成了前移

线性表的其他功能

  • 求长度
  • 获取指定元素的位置

在上面的基础上都相对容易实现,可以自己动手来写写看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值