数据结构顺序表的实现

顺序表:

        用顺序存储的方式实现线性表 将物理逻辑上相邻的元素存储在相邻的位置上

复习malloc函数:

void *malloc(size_t size) 

malloc函数的作用是开辟一块size大小的内存空间 并返回该内存空间指向的指针

(若分配失败 返回NULL)

在顺序表的实现中 最开始我们尝试静态存储 

#define MaxSize 10
typedef struct{
	ElemType data[MaxSize];
	int length;//顺序表当前的长度
	}SqList;

      由于C语言数组长度的不可变性 当顺序表存储空间不足或者长度过大时都会造成问题

于是 引入顺序表的动态存储

#include<stdio.h>
#include<stdlib.h>
#define InitSize 10//默认顺序表的最大长度
typedef struct SeqList{
	int* data; //指示动态分配数组的指针 接收malloc函数的返回值
	int MaxSize;//顺序表的最大容量
	int length;//顺序表当前的长度
}SeqList;
void InitList(SeqList &L) {
	// sizeof获得单个int类型数据的内存 Initsize是最大容量 
	//二者相乘可以获得所需要最大的内存空间
	L.data = (int*)malloc(InitSize * sizeof(int));
	//返回指针后需要强制转换成自己定义的元素类型指针
	L.length = 0;
	L.MaxSize = InitSize;
	//最开始的时候 顺序表的最大容量就是MaxSize
}
void IncreaseSize(SeqList &L, int len) {
	int* p = L.data;
	//用p指针接收原来顺序表的内存地址
	int i = 0;
	L.data = (int*)malloc((InitSize + len) * sizeof(int));
	//将顺序表最大容量进行扩充 增加len个容量 开辟新的内存地址
	for (i; i < L.length; i++) {
		L.data[i] = p[i];
		//将顺序表内原有的数据通过指针复制到新的内存地址里

	}
	L.MaxSize = L.MaxSize + len;
	//
	free(p);
	//free函数 删除掉老的顺序表内存
}
int main() {
	SeqList L;
	InitList(L);
	IncreaseSize(L, 5);
	printf("现在顺序表的容量是%d", L.MaxSize);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值