数据结构学习:顺序表的创建

数据结构学习:顺序表的创建
在这里插入图片描述
如何使用代码创建一个静态顺序表,并初始化

#include <iostream>
using namespace std;
#define MaxSize 10 //定义最大长度

typedef struct{
	int data[MaxSize];	//采用静态数组来存放数据元素
	int length;			//顺序表的当前长度
}SqList;				//定义结构体顺序表的名称为SqList

void InitList(SqList &L)
{
	for(int i = 0; i < MaxSize; i++)
		L.data[i] = 0;	//将表里的所有元素设为0初始值	
	L.length = 0;		//顺序表的初始长度为0
}

int main()
{
	SqList L;	//声明一个顺序表
	InitList(L);	//初始化顺序表
	for(int i = 0; i < MaxSize; i++)
	cout<<"data["<<i<<"] = "<<L.data[i]<<endl;
   return 0;
}

运行结果为:

data[0] = 0
data[1] = 0
data[2] = 0
data[3] = 0
data[4] = 0
data[5] = 0
data[6] = 0
data[7] = 0
data[8] = 0
data[9] = 0

如果不初始化的话,

#include <iostream>
using namespace std;
#define MaxSize 10 //定义最大长度

typedef struct{
	int data[MaxSize];	//采用静态数组来存放数据元素
	int length;			//顺序表的当前长度
}SqList;				//定义结构体顺序表的名称为SqList
void InitList(SqList &L)
{
		
	L.length = 0;		//顺序表的初始长度为0
}

int main()
{
	SqList L;	//声明一个顺序表
	InitList(L);	//初始化顺序表
	for(int i = 0; i < MaxSize; i++)
	cout<<"data["<<i<<"] = "<<L.data[i]<<endl;
   return 0;
}

打印表中信息为:

data[0] = 503362864
data[1] = 32613
data[2] = 0
data[3] = 0
data[4] = 4199024
data[5] = 0
data[6] = 4198560
data[7] = 0
data[8] = -1926700400
data[9] = 32765

内存中会有遗留的脏数据
但是初始化一般是可以省略的,因为本来这种打印顺序表信息的方式就是违规的,因为定义的当前顺序表的长度为0,我们也并没有向表内存储信息,打印时令i < L.length的话,打印为空。
更好的做法是使用基本操作来访问各个数据表

静态分配存在一些问题顺序表的表长刚开始确定后就无法更改(存储空间是静态的),存储满了以后是无法扩大的提前声明会导致内存空间的不足或者浪费。
所以就要用到动态表
顺序表的实现 —— 动态分配
可以通过使用malloc函数来申请一片连续的内存空间来存储数据,要增加内存空间时,则申请一片更大的空间来储存,并将原来的空间释放
要注意malloc函数的头文件#include<stdlib.h>。

#include <iostream>
#include<stdlib.h>
using namespace std;
#define InitSize 10 //顺序表的初始长度

typedef struct{
int *data; //指示动态分配数组的指针
int MaxSize; //顺序表的最大容量
int length; //顺序表的当前长度
} SeqList; //顺序表的类型定义(动态分配方式)

void InitList(SeqList &L)
{//用malloc函数申请一片连续的存储空间来存储数据
	L.data = (int *)malloc(InitSize*sizeof(int));
	//(int *)中的int要与结构体中data指针的数据类型保持一致
	L.length = 0;		//顺序表的初始长度为0
	L.MaxSize = InitList;
}

//增加动态数组的长度
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;	//顺序表最大长度增加len
	free(p);						//释放原来的内存空间	
}

int main()
{
	SeqList L;		//声明一个顺序表
	InitList(L);	//初始化顺序表
	IncreaseSize(L,5); 	//顺序表增加5个元素的空间
   return 0;
}
  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小二康

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

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

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

打赏作者

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

抵扣说明:

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

余额充值