第二章
本章的基本内容是:
1、线性表的逻辑结构2、 线性表的顺序存储及实现 3、线性表的链接存储及实现4、 顺序表和链表的比较5、 线性 表的其他存储方法
这一章是我还残有最多印象的一章了,线性表。考前才开始写博文之前我就预料到了,所以,大体来说,关于这一章,我印象最深的就是循环链表和双链表的,因为当时为了完成实验,我从网上见到了很多人编的双链表或者是循环双链表,让我深切感觉到了,自己并不适合这个专业,请问现在反悔还能复读吗?
有个人跟我说过:“程序设计是很有意思的,为什么这么说呢,因为可以自己创造一个所有规则都由自己设定的世界,很多男人都曾经这样想过。”关于这一点,我认为他说的很对,就好像文科生和理科生之间的区别,文科生喜欢一个房子,他可能会写下来,或者是画下来,甚至直接在脑子里幻想一下就好了,但是真正用木料搭建起来一个按比例的房子模型的还得说是工、理科生,世界都是你们的,加油啊。
所以我现在来说一下自己对这一章的感受,线性表,应该是程序最早的用处之一,储存人类并不想用纸质或者其他实体存储的大量数据,并用最简单的方式找到它,所以说,如果存储大量数据应该还是用链表没错吧(我这样说没什么自信),链表用节点用指针把数据串起来,计算机寻找的时候插入和删除的时候就可以对准节点插进去(我没说错吧)大体来说,这一章我还是有比其他章数有更多记忆的,因为其他章我所听的内容都很少了,所以我对自己的专业课,目前还是有很多担心的,听说速成需要脑子好,我自己感觉来说,恐怕凶多吉少。
下面是定义的摘抄:
线性表的定义:线性表:简称表,是n(n≥0)个具有相同类型的数据元素的有限序列。 线性表的长度:线性表中数据元素的个数。 空表:长度等于零的线性表,记为:L=( )。 非空表记为:L=(a1, a2 , …, ai-1, ai , …, an)其中,ai(1≤i≤n)称为数据元素;下角标 i 表示该元素在线性表中的位置或序号 。 线性表的特性:1. 有限性:线性表中数据元素的个数是有穷的。2. 相同性:线性表中数据元素的类型是同一的。3. 顺序性:线性表中相邻的数据元素ai-1和ai之间存在序偶关系(ai-1, ai),即ai-1是ai的前驱, ai是ai-1的后继;a1无前驱,an无后继,其它每个元素有且仅有一个前驱和一个后继。 线性表的抽象数据类型定义:ADT ListData
线性表中的数据元素具有相同类型, 相邻元素具有前驱和后继关系
OperationInitList 前置条件:表不存在 输入:无 功能:表的初始化 输出: 无 后置条件:建一个空表。
DestroyList
前置条件:表已存在 输入:无 功能:销毁表 输出:无 后置条件:释放表所占用的存储空间Length 前置条件:表已存在 输入:无 功能:求表的长度 输出:表中数据元素的个数 后置条件:表不变Get
前置条件:表已存在 输入:元素的序号i 功能:在表中取序号为i的数据元素 输出:若i合法,返回序号为i的元素值,否则抛出异常 后置条件:表不变Locate 前置条件:表已存在 输入:数据元素x 功能:在线性表中查找值等于x的元素 输出:若查找成功,返回x在表中的序号,否则返回0 后置条件:表不变Insert前置条件:表已存在输入:插入i;待插x功能:在表的第i个位置处插入一个新元素x输出:若插入不成功,抛出异常 后置条件:若插入成功,表中增加一个新元素
Delete
前置条件:表已存在输入:删除位置i功能:删除表中的第i个元素 输出:若删除成功,返回被删元素,否则抛出异常 后置条件:若删除成功,表中减少一个元素
存储结构和存取结构 :
存储结构是数据及其逻辑结构在计算机中的表示;存取结构是在一个数据结构上对查找操作的时间性能的一种描述。 “顺序表是一种随机存取的存储结构”的含义为:在顺序表这种存储结构上进行的查找操作,其时间性能为O(1)。
如何申请一个节点:
template <class DataType>struct Node{
DataType data;
Node<DataType> *next;
};
单链表头指针:指向第一个结点的地址。尾标志:终端结点的指针域为空。
算法设计的一般步骤:
第一步:确定入口(已知条件)、出口(结果);第二步:根据一个小实例画出示意图;第三步:① 正向思维:选定一个思考问题的起点,逐步提出问题、解决问题;② 逆向思维:从结论出发分析为达到这个结论应该先有什么;③ 正逆结合;第四步:写出顶层较抽象算法,分析边界情况;第五步:验证第四步的算法;第六步:写出具体算法;第七步:进一步验证,手工运行。
间接寻址:是将数组和指针结合起来的一种方法,它将数组中存储数据元素的单元改为存储指向该元素的指针 。
相对于顺序表而言,静态链表有什么优点? 优点:在执行插入和删除操作时,只需修改游标,不需要移动表中的元素,从而改进了在顺序表中插入和删除操作需要移动大量元素的缺点。 缺点:没有解决连续存储分配带来的表长难以确定的问题;静态链表还需要维护一个空闲链;静态链表不能随机存取。
析构函数:
析构函数用于在一个对象被撤消时删除其成员变量,其标志是在类的名字前面加上“~”。析构函数特点:1.析构函数没有参数和返回值;2.一个类只能有一个析构函数;3. 析构函数不允许重载。
这一章是我还残有最多印象的一章了,线性表。考前才开始写博文之前我就预料到了,所以,大体来说,关于这一章,我印象最深的就是循环链表和双链表的,因为当时为了完成实验,我从网上见到了很多人编的双链表或者是循环双链表,让我深切感觉到了,自己并不适合这个专业,请问现在反悔还能复读吗?
有个人跟我说过:“程序设计是很有意思的,为什么这么说呢,因为可以自己创造一个所有规则都由自己设定的世界,很多男人都曾经这样想过。”关于这一点,我认为他说的很对,就好像文科生和理科生之间的区别,文科生喜欢一个房子,他可能会写下来,或者是画下来,甚至直接在脑子里幻想一下就好了,但是真正用木料搭建起来一个按比例的房子模型的还得说是工、理科生,世界都是你们的,加油啊。
所以我现在来说一下自己对这一章的感受,线性表,应该是程序最早的用处之一,储存人类并不想用纸质或者其他实体存储的大量数据,并用最简单的方式找到它,所以说,如果存储大量数据应该还是用链表没错吧(我这样说没什么自信),链表用节点用指针把数据串起来,计算机寻找的时候插入和删除的时候就可以对准节点插进去(我没说错吧)大体来说,这一章我还是有比其他章数有更多记忆的,因为其他章我所听的内容都很少了,所以我对自己的专业课,目前还是有很多担心的,听说速成需要脑子好,我自己感觉来说,恐怕凶多吉少。
下面是定义的摘抄:
线性表的定义:线性表:简称表,是n(n≥0)个具有相同类型的数据元素的有限序列。
线性表的长度:线性表中数据元素的个数。
空表:长度等于零的线性表,记为:L=( )。
非空表记为:L=(a1, a2 , …, ai-1, ai , …, an)其中,ai(1≤i≤n)称为数据元素;
下角标 i 表示该元素在线性表中的位置或序号 。 线性表的特性:1. 有限性:线性表中数据元素的个数是有穷的。
2. 相同性:线性表中数据元素的类型是同一的。
3. 顺序性:线性表中相邻的数据元素ai-1和ai之间存在序偶关系(ai-1, ai),即ai-1是ai的前驱, ai是ai-1的后继;a1无前驱,an无后继,其它每个元素有且仅有一个前驱和一个后继。 线性表的抽象数据类型定义:ADT List
Data
线性表中的数据元素具有相同类型,
相邻元素具有前驱和后继关系
Operation
InitList 前置条件:表不存在
输入:无
功能:表的初始化
输出: 无
后置条件:建一个空表
。
DestroyList
前置条件:表已存在
输入:无
功能:销毁表
输出:无
后置条件:释放表所占用的存储空间
Length
前置条件:表已存在
输入:无
功能:求表的长度
输出:表中数据元素的个数 后置条件:表不变Get
前置条件:表已存在
输入:元素的序号i
功能:在表中取序号为i的数据元素
输出:若i合法,返回序号为i的元素值,否则抛出异常
后置条件:表不变
Locate
前置条件:表已存在
输入:数据元素x
功能:在线性表中查找值等于x的元素
输出:若查找成功,返回x在表中的序号,否则返回0
后置条件:表不变Insert
前置条件:表已存在
输入:插入i;待插x
功能:在表的第i个位置处插入一个新元素x
输出:若插入不成功,抛出异常
后置条件:若插入成功,表中增加一个新元素
Delete
前置条件:表已存在
输入:删除位置i
功能:删除表中的第i个元素
输出:若删除成功,返回被删元素,否则抛出异常
后置条件:若删除成功,表中减少一个元素
存储结构和存取结构 :
存储结构是数据及其逻辑结构在计算机中的表示;
存取结构是在一个数据结构上对查找操作的时间性能的一种描述。 “顺序表是一种随机存取的存储结构”的含义为:在顺序表这种存储结构上进行的查找操作,其时间性能为O(1)。
如何申请一个节点:
template <class DataType>
struct Node
{
DataType data;
Node<DataType> *next;
};
单链表头指针:指向第一个结点的地址。
尾标志:终端结点的指针域为空。
算法设计的一般步骤:
第一步:确定入口(已知条件)、出口(结果);
第二步:根据一个小实例画出示意图;
第三步:① 正向思维:选定一个思考问题的起点,逐步提出问题、解决问题;② 逆向思维:从结论出发分析为达到这个结论应该先有什么;③ 正逆结合;
第四步:写出顶层较抽象算法,分析边界情况;
第五步:验证第四步的算法;
第六步:写出具体算法;
第七步:进一步验证,手工运行。
间接寻址:是将数组和指针结合起来的一种方法,它将数组中存储数据元素的单元改为存储指向该元素的指针 。
相对于顺序表而言,静态链表有什么优点? 优点:在执行插入和删除操作时,只需修改游标,不需要移动表中的元素,从而改进了在顺序表中插入和删除操作需要移动大量元素的缺点。
缺点:没有解决连续存储分配带来的表长难以确定的问题;静态链表还需要维护一个空闲链;静态链表不能随机存取。
析构函数:
析构函数用于在一个对象被撤消时删除其成员变量,其标志是在类的名字前面加上“~”。
析构函数特点:
1.析构函数没有参数和返回值;
2.一个类只能有一个析构函数;
3. 析构函数不允许重载。