数据结构第二章--线性表

线性表是一种有限序列的数据结构,包含相同类型的数据元素。基本操作包括初始化、销毁、插入、删除、查找等。顺序存储实现中,元素在物理位置上相邻。顺序表可通过静态或动态分配实现,动态分配允许灵活扩展但拓展成本较高。
摘要由CSDN通过智能技术生成

目录

1.线性表的定义和基本操作

  • 定义---逻辑结构
  • 基本操作--运算

2.线性表的顺序表示

  • 定义(如何用代码实现)
  • 基本操作的实现

注:数据结构三要素:逻辑结构、数据的运算、存储结构(物理结构)。存储结构不同,运算的实现方式不同

具体内容

1.线性表的定义和基本操作

线性表的定义

线性表是具有相同数据类型的n(n>=0)个数据元素有限序列。其中n为表长,当n等于零时,线性表示一个空表,若用L命名线性表,则其一般表示为,L=(a1,a2...ai,ai+1..an)

几个概念要注意

  • ai是线性表中的"第i个"元素线性表中的位序(位序从1开始,数组下标从0开始)
  • a1是表头元素,an是表尾元素。
  • 除第一个元素外,每个元素有且仅有一个直接前驱,除最后一个元素外,每个元素有且仅有一个直接后继

 由此得出线性表特点:

  • 表中元素的个数有限,
  • 表中元素具有逻辑上的顺序性,表中元素有其先后次序的。
  • 表中元素都是数据元素,每个元素都是单个元素
  • 表中元素的数据类型都相同,这意味着每个元素占有型都相同,这意味着每个元素占有相同大小的存储空间。
  • 表中元素具有抽象性,仅仅讨论元素间的逻辑关系而不考虑元素究竟表示什么内容

线性表的基本操作

InitList(&L) 初始化表。构造一个空的线性表L,分配内存空间销毁操。

DestoryList(&L)销毁操作。销毁线性表,并释放线性表L所占用的内存空间

ListInsert(&L,i,e)插入操作。在表L中的第i个位置上插入指定元素e

ListDelete(&L,i,&e)删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值。

LocateElem(L,e)按值查找操作。在表L中查找具有给定关键字值的元素。

GetElem(L,i)按位查找操作。在表中L中第i个位置的元素的值

其他常用操作

Length(L)求表长。返回线性表L的长度,即L中数据元素的个数。

PrintList(L)输出操作。按前后顺序输出线性表L的所有元素值

Empty(L)判空操作,若L为空表,则返回true,否则返回false

Tips:

(1)对数据的操作(记忆思路)--创销,增删改查

(2)C语言函数的定义:<返回值类型>函数名(<参数1类型>参数1,<参数2类型>参数2....)

(3)实际开发中,可根据实际需求定义其他的基本操作

  (4)   函数名和参数的形式命名都可以改变,命名要有可读性

(5)什么时候要传入引用“&”---对参数的修改结果需要“带回来

没有带回来:

 带回来了

为什么要实现对数据结构的基本操作呢?

(1)团队合作编程,定义的数据结构要让别人能够很方便的使用(封装)

(2)将常用操作/运算封装成函数,避免重复工作,降低出错风险。

总结

 2.线性表的顺序表示

定义

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

 顺序表的实现---静态分配

 案例:

 如果去掉(2)部分代码如下,会产生脏数据:

 L.length=0不可以省略。

注意:一维数组可以是静态分配的,也可以是动态分配的。

在静态分配时,由于数组的大小和空间事先已经固定,一旦空间占满再加入,新的数据就会产生溢出,进而导致程序崩溃。

 

顺序表的实现---动态分配

 案例

顺序表的特点:

  • 随机访问,即可以在O(1)时间内找到第i个元素。
  • 存储密度高,每个节点只存储数据元素
  • 拓展容量不方便,即便采用动态分配的方式实现。拓展长度的时间复杂度也比较高。

总结:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值