您的位置:首页 > 理论基础 > 数据结构算法

大学数据结构(c++版) 王红梅版 疑惑——第二章

2014-12-11 20:30 344 查看

        第二章

      

      本章的基本内容是:

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. 析构函数不允许重载。

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息