数据结构学习笔记(1){顺序表的定义}

数据表的定义

顺序表就是数组,但是在数组的基础上,它还要求数据是连续,从头开始存储的,不能跳跃间隔,这个数组使用的是一片连续的内存空间。

以下代码是线性表的简单定义

#define MaxSize 10
typedef struct {
	int data[MaxSize];
	int length;
}SqList;

void InitList(SqList& L)
{
	for (int i = 0; i < MaxSize; i++)
		L.data[i] = 0;
	L.length = 0;
}

int main()
{
	SqList L;
	InitList(L);
	return 0;
}

当然InitList函数并非一定要去定义,可以不进行定义,只是线性表内会有之前内存中所含有的数据,如果不对线性表进行赋值覆盖,直接打印,此时的数据将会是依托答辩。 

但是这种定义方式定义死了这个顺序表的大小(大小由MaxSize控制,控制为10),这种方式一开始就把顺序表的容量规定死了,无法更改,且如果超出了容量,程序会报错,无法继续运行。

顺序表的空间分配

静态分配

#define MaxSize 10
typedef struct {
	int data[MaxSize];
	int length;
}Sqlist;

而这种方式就是程序的静态分配,这时候就可以脑洞大开一下,为了不超出顺序表的容量,将MaxSize定义的特别大,这样我们不就拥有了结晶与无限的容量了吗,的确可以这么干,但是这个程序在内存中的占用将是巨大的,并不利于程序的运行。因此我们有了更优的顺序表定义方式动态分配

动态分配

#define InitSize 10
typedef struct {
	int* data;
	int MaxSize;
	int Length;
}SeqList;

在具体实践中会用到,mallocfree这两个函数

mallo函数

malloc函数是动态分配内存空间的函数,需要用<stdlib.h>的头文件,

#include <stdio.h>
#include <stdlib.h>
#define InitSize 10
typedef struct {
	int* data;
	int Maxsize;
	int length;
}SeqList;

void InitList(SeqList) {
	L.data = (int*)malloc(InitSize * sizeof(int));//申请了一个定义的InitSize大小乘以int大小的内存,由于前面加上了一个(int*),所以malloc最后传入data必定为整型
	L.length = 0;
	L.MaxSize = InitSize;
}

void IncreaseSize(SeqList& L, int len) {
	int* p = L.data;
	L.data = (int*)malloc((L.Maxsize + len) * sizeof(int));
	for (int i = 0; i <L.length; i++)
	{
		L.data[i] = p[i];
	}
	L.Maxsize = L.Maxsize + len;
	free(p);
}

int main() {
	SeqList L;
	InitList(L);
	IncreaseSize(L, 5);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我是世界大好人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值