数据结构课上笔记3

这节课介绍了线性表结构和顺序表示的一部分内容。

操作太多,而且书上有,就不一一介绍分析了。

线性表定义:n个数据元素的有限序列。

特点:

  1. 存在唯一一个称作“第一个”的元素。
  2. 存在唯一一个称作“最后一个”的元素
  3. 除最后一个元素外,集合中每一个元素都只有一个直接前趋
  4. 除最后一个元素外,集合中每一个元素都只有一个直接后继

注意1、2条:证明循环的序列不是线性表

 

注意:

1)线性表从1开始,线性表第一个元素对应到数组中下标是0.

2)函数通过引用对线性表的元素进行修改即可

3)数组比较特别,它即可视为逻辑结构,又可视为存储结构。

4)每一个表元素都是不可再分的原子数据。一维数组可以视为线性表,二维数组不可以,在逻辑上它最多可以有两个直接前趋和直接后继。

5)线性表具有逻辑上的顺序性,在序列中各元素有其先后次序,各个数据元素在线性表中的逻辑位置只取决于序号。

 

顺序表:是线性表的循序储存结构,以物理位置表示逻辑关系,任意元素可以随机存取。用一组地址连续的存储单元依次存储线性表中的元素。逻辑顺序和物理顺序是一致的。可以顺序访问,也可随机访问。

顺序表存储:

这些定式还是很重要的,比如define typedef等,真正实现时最好就这样写,不要自己规定个长度和数据类型,这样以后好维护、修改。

静态存储分配:

#define maxSize 100//显式定义表长

Typedef int DataType;//定义数据类型

Typedef struct{

DataType data[maxSize];//静态分配存储表元素向量

Int n;//实际表中个数

}SeqList;

 

动态存储分配:

#define maxSize 100//长度初始定义

Typedef int DataType;//定义数据类型

Typedef struct{

DataType *data;//动态分配数组指针

Int maxSize,n;//最大容量和当前个数

}SeqList;

 

初始动态分配:

Data=(DataType *)malloc(sizeof(DataType)* initSize);

C++:data=new DataType[initSize];

maxSize=initSize;n=0;

动态分配存储,向量的存储空间是在程序执行过程中通过动态存储分配来获取的。空间满了就另外分配一块新的更大的空间,用来代替原来的存储空间,从而达到扩充的目的。

 

插入:需要查找,移动元素,概率上1,2,3....n,平均O(N)

删除:同样需要移动元素。填充被空出来的存储单元。

在等概率下平均移动次数分别为n/2,(n-1)/2

 插入注意事项:

  1. 需要判断是否已满
  2. 要从后向前移动,否则会冲掉元素

删除注意事项:

  1. 需要先判断是否已空
  2. 需要把后方元素前移,要从前向后。

 

注意:线性表的顺序存储借用了一维数组,但是二者不同:

  1. 一维数组各非空结点可以不相继存放,但顺序表是相继存放的
  2. 顺序表长度是可变的,一维数组长度是确定的,一旦分配就不可变
  3. 一维数组只能按下标存取元素,顺序表可以有线性表的所有操作。

 

 

 

 

 

 

 

 

 

 

 

  • 152
    点赞
  • 213
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 27
    评论
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

兔老大RabbitMQ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值