线性表 Linear List(顺序表的实现方式及基本操作)

什么是线性表

线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,n为表长,当n为0时,我们称该线性表是一个空表。
重要概念:

  • ai是线性表中的第i个元素,i指的是位序,位序从1开始
  • a1是表头元素,an是表尾元素
  • 除第一个元素外,每个元素都有且仅有一个直接前驱(就是紧挨着该元素之前的一个元素);除最后一个元素外,每个元素都有且仅有一个直接后继(就是紧挨着该元素之后的一个元素)

顺序表

顺序表就是用顺序存储方式实现的线性表。
把逻辑上相邻的元素存储在物理位置也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。

顺序表的特点

  • 随机访问,即可以在O(1)时间内找到第i个元素
  • 存储密度高,每个节点只存储数据元素(相比于链表,链表还要存放指向下一个元素的指针)
  • 拓展容量不方便(即使采用动态分配的方式实现,拓展长度的时间复杂度也比较高)
  • 插入、删除操作不方便,需要移动大量的元素

顺序表的实现——静态分配
存储空间是静态的,顺序表的表长从最开始确定过后就无法更改

#define Maxsize 10//顺序表的长度
typedef stuct{
   
	Elemtype data[MaxSize];//静态分配
	int length;//顺序表当前的长度
}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);
}

顺序表的实现——动态分配
c语言中提供了malloc和free函数动态申请和释放内存空间
malloc函数返回一个指针,需要强制转换为你所定义的数据元素类型指针:L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize);

#include<stdlib.h>///malloc、free函数的头文件
#define InitSize 10//顺序表的初始长度
typedef struct{
   
	ElemType *data;//指示动态分配数组的指针
	int MaxSize;//顺序表的最大容量
	int length;//顺序表的当前长度
}SeqList;//顺序表的类型定义(动态分配方式)
void InitList(SeqList &L)</
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值