【数据结构】线性表

一,线性表

1.基本概念

a.定义:线性表是具有相同数据类型的n个数据元素的有限序列 ,其中n位表长,当n=0是线性表是一个空表
b.几个概念:
·a
i
是线性表中的“第i个”元素线性表中的位序(注意:位序从1开始,数组下标从0开始)。
·a
1
表头元素;an表尾元素
·除第一个元素外,每个元素有且仅有一个前驱;除最后一个元素外,每个元素有且仅有一个后继
在这里插入图片描述

2.基本操作

InitList(&L):初始化表。构造一个空的线性表L,分配内存空间
DestroyList(&L):销毁操作。销毁线性表,并释放线性表L所占内存空间

ListInsert(&L,n,e):插入操作。在第n个位置插入元素e
ListDelete(&L,n,&e):删除操作。删除表L中第n个位置元素,并用e返回删除元素的值
LocateElem(&L,n):按值查找。在表L中查找指定元素n的位置
GetElem(&L,n):按位查找。获取表L中第n个位置的元素的值
其他常用操作:
Length(L):求表长。返回线性表L的长度,即元素个数
PrintList(L):输出操作。按前后顺序输出线性表L的所有值
Empty(L):判空操作。若L为空表,则返回true,否则返回false
(1)以上函数名均可自己定义,但要有可读性。
(2)有些用到&是需要保留修改的结构,这是传址运算

【小结】

在这里插入图片描述

二,顺序表

1.存储结构

(1)定义:顺序表是具有相同类型的n(n>=0)个数据元素的有限序列。
(2)顺序存储:在逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系又存储单元的邻接关系来体现。

2.实现方式

(1)静态分配

使用“静态数组”实现,在定义时就已经确定了元素的个数,且大小无法被改变。
代码实现

typedef struct SeqList
{
	int data[MaxSize];//用静态的“数组”存放数据元素,“数组”的具体类型根据具体需求选择
	int length;//顺序表的当前长度
}SL;//顺序表的类型定义
(2)动态分配

使用“动态数组”实现,当顺序表存满时,可再用malloc动态扩展顺序表的最大容量,需要将数据元素复制到新的存储区域,并用free函数释放原区域。
代码实现

typedef struct SeqList
{
	int* data;//指向动态分配数组的指针
	int MaxSize;//顺序表的最大容量
	int length;//顺序表当前的长度
}SL;
(3)顺序表的特点

a.随机访问,即可以在O(1)时间内找到第i个元素。
b.存储密度高,每个节点只存储数据元素。
c.扩展内容不方便(基本采用动态分配的方式实现,扩展长度的时间复杂度也比较高)
d.插入,删除操作不方便,需要移动大量元素。

3.基本操作

研究数据结构的基本操作一般是创建,销毁,增删查改。
由于代码实现都是编者之间以int类型写的,难免出现一些问题,可能不难保证代码的健壮性,若读者发现其中的问题,可以指出

(1) 初始化一个顺序表
void InitList(SL* L)
{
	L->data = (int*)malloc(InitSize * sizeof(int));//用
  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值