C++ 数据结构(三线性表)

写在前面::线性表说的是存储结构,堆栈说的是抽象数据类型!!

线性表的逻辑结构

线性表的定义

线性表是形式为(a1,a2,a2, …, an)的数据对象,其中ai是表中的元素,n代表长度。当n = 0时,表为空;n > 0时,ai是序号为i的数据元素(i = 1,2,3, …, n)。a1是第一个元素,an是最后一个元素,可以认为a1优先于a2,a2优先于a3,以此类推。

线性表的基本操作

数据结构的操作定义在逻辑结构层次上,而具体的操作实现建立在存储结构上。
逻辑结构层次:元素间的逻辑关系(线性和非线性)
存储结构:顺序存储、链式存储、索引存储、散列存储(哈希存储)
数据结构的操作是根据存储的方式(存储结构),改变元素间的关系(逻辑结构)。
算法的实现必须建立在存储结构确定之后。
算法:对特定问题求解步骤的一种描述,是指令有限序列;算法操作集合。
算法实现:确定存储结构的基础上,完成对逻辑关系改变操作的集合。

线性表存储及实现

线性表的顺序存储及操作实现

顺序表的定义

线性表的顺存储是指 在内存中用地址连续的存储空间 顺序存放 线性表中的各个元素,用这种存储形式存储的线性表成为顺序表。
用一维数组表示顺序表的存储区域:
线性表的顺序存储示意图
           在这里插入图片描述
在顺序表中,每个节点的存储地址是该节点在表中的位置i的线性函数。只要知道基地址和每个节点大小,就可以在相同时间内求出任一节点的存储地址。因此,它是一种随机存储结构,即顺序表具有按数据元素的序号随机存取的特点。

	 LinearList(); /*构造函数:初始化对象*/
	 ~LinearList(); /*析构函数:结束生命周期*/
顺序表的操作实现
/*
增、删、改、查
*/

插入(删除同理)注意问题:
顺序表中数据区域有MaxSize个存储单元,所以在向顺序表中做插入操作是要先检查空间是否满了;
要检验插入位置的有效性;
注意移动方向。

顺序表小结

线性表无需为表示节点间的逻辑关系增加额外的存储空间;
随机存储表中任一元素;
插入删除操作不便;
顺序表要求占用连续的存储空间,存储分配职能预先进行静态分配,因此表变化时,难以确定合适的存储规模。

线性表的链式存储及操作实现

链式存储结构的线性表为链表,它是通过“链”建立起数据元素间的逻辑关系的。
从实现角度链表分:动态链表、静态链表
从连接方式链表分:单链表、循环链表、双向链表

单链表的定义

相关概念示意图(图说明有时间加):
  在这里插入图片描述
易混知识点:
指针变量和节点变量
   在这里插入图片描述
                   指针变量和节点变量比较

指针变量节点变量
定义在变量说明部分显示定义在程序执行时,通过标准函数new生成
表示p*p
取值非空时,存放某类型节点的地址实际存放节点各域的内容
变量值含义指针变量的值表示节点地址节点变量的值表示节点内容
操作方式通过指针变量名访问通过指针生成、访问和释放

操作:通过指针变量!通过指针变量!通过指针变量!!!
链接方式(逻辑关系(指针))

单链表的基本操作实现
/*
创建
增删改查
*/

在这里插入图片描述

循环链表、双向链表

我们说"线性"和"非线性",只在逻辑层次上讨论,而不考虑存储层次,所以双向链表和循环链表依旧是线性表。
把单向链表的最后一个节点的链接指针指向头结点,这样就把单链表改成了循环链表。
循环链表的操作和单链表的操作基本相同,不同点是判断链表结束的标志NULL变为头指针。

/*
增删改查EZ
*/

静态链表:用游标模拟指针,用数组描述的链表,即称为静态链表。
动态链表:节点空间分配(new)和回收(delete)分别是系统提供的函数实现。
 1)动态静态链表首先都是链表,都有链(都有指针);
 2)静态链表的指针是在固定大小存储空间上的游标;动态链表的指针是存储的下一个节点变量地址的指针变量。
 3)静态链表类似于数组,顺序存储且物理空间连续,大小固定;动态链表动态申请,长度、存储位置没有限制。

顺序表和链表的选取

考虑存储:顺序表存储空间静态分配,链表存储动态分配。
考虑操作:顺序表访问时间复杂度O(1),链表访问时间复杂度O(n);增删改同样考虑。
万变不离其宗的考虑归根到底:输入<—处理—>输出

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Echo一

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

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

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

打赏作者

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

抵扣说明:

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

余额充值