数据结构课程总结——第一章绪论
- 格式:docx
- 大小:27.17 KB
- 文档页数:4
第1章绪论1.数据(Data) :是描述客观事物的数字、字符以及所有能输入到计算机中并能被计算机接受的各种符号集合的统称。
包括数值数据和非数值数据(字符串、图形、图像、音频、视频)。
2.数据元素(Data Element) :表示一个事物的一组数据称为一个数据元素(结点顶点、记录);数据元素是数据的基本单位。
3.数据项(Data Item):是数据元素中有独立含义的、不可分割的最小标识单位(字段、域、属性)。
一个数据元素可由若干个数据项组成。
4.数据对象(Data Object):是性质相同的数据元素的集合,是数据的一个子集。
如字符集合C ={A,B,C,…} 。
数据(Data) :是描述客观事物的数字、字符以及所有能输入到计算机中并能被计算机接受的各种符号集合的统称。
包括数值数据和非数值数据(字符串、图形、图像、音频、视频)。
数据元素(Data Element) :表示一个事物的一组数据称为一个数据元素(结点、顶点、记录);数据元素是数据的基本单位。
数据项(Data Item):是数据元素中有独立含义的、不可分割的最小标识单位(字段、域、属性)。
一个数据元素可由若干个数据项组成。
数据对象(Data Object):是性质相同的数据元素的集合,是数据的一个子集。
如字符集合C ={A,B,C,…} 。
●数据的逻辑结构指数据元素之间的逻辑关系,用一个数据元素的集合和定义在此集合上的若干关系来表示。
●四种逻辑结构:集合、线性结构、树型结构、图状结构。
●数据结构的形式定义是一个二元组:Data-Structure=(D,S)其中:D是数据元素的有限集,S是D上关系的有限集。
例1:设数据逻辑结构B=(K,R)K={k1, k2, …, k9}R={ <k1, k3>,<k1, k8>,<k2, k3>,<k2, k4>,<k2, k5>,<k3, k9>,<k5, k6>,<k8, k9>,<k9, k7>,<k4, k7>,<k4, k6>有时候关系图不唯一(一般是无向图)●数据结构在计算机内存中的存储包括数据元素的存储和元素之间的关系的表示。
《数据结构》吕云翔编著第1章绪论习题解答数据结构是计算机科学中的一个重要概念,它涉及到存储、组织和管理数据的方法和技术。
《数据结构》是吕云翔编著的一本经典教材,本文将就第1章绪论中的习题进行解答。
1. 为什么要学习数据结构?数据结构是计算机科学的基础,它为我们提供了存储和操作数据的方式。
学习数据结构能够帮助我们更好地理解和分析问题,设计高效的算法,并且能够为我们解决实际问题提供支持。
2. 什么是数据结构?数据结构指的是数据元素之间的关系,以及存储和访问这些数据的方法。
常见的数据结构包括数组、链表、栈、队列、树、图等。
每种数据结构都有各自的特点和适用场景。
3. 数据结构有哪些基本操作?数据结构的基本操作包括插入、删除和查找。
插入操作将一个新的元素插入到数据结构中,删除操作将一个元素从数据结构中移除,查找操作用于寻找特定元素的位置或者判断某个元素是否存在。
4. 什么是线性结构?线性结构是数据元素之间呈线性关系的数据结构。
常见的线性结构有数组和链表。
数组是一种连续存储数据元素的结构,链表是一种通过指针将数据元素链接起来的结构。
5. 什么是非线性结构?非线性结构是数据元素之间呈非线性关系的数据结构。
常见的非线性结构有树和图。
树是一种层次结构,图是由节点和边组成的结构,节点之间的关系可以是任意的。
6. 什么是抽象数据类型?抽象数据类型(ADT)是一种数学模型,它定义了一种数据类型的抽象行为和操作。
ADT将数据的逻辑结构和数据的物理存储分离,使得数据结构和数据操作可以独立地进行设计和实现。
7. 数据结构的选择原则是什么?选择适当的数据结构是解决问题的关键。
选择数据结构应该考虑到数据的特点、操作的效率和实际应用需求。
在选择数据结构时,需要综合考虑空间复杂度和时间复杂度的因素,并且合理权衡它们之间的关系。
8. 数据结构与算法之间有什么关系?数据结构和算法是紧密相关的。
数据结构提供了算法操作的底层基础,而算法则是对数据结构进行操作的具体步骤和方法。
一、课程简介算法与数据结构是计算机等相关专业的一门十分重要的专业基础课,在计算机学科中起到承前启后的作用。
它主要研究计算机加工对象的逻辑结构、在计算机中的表示形式以及实现各种基本操作的算法。
要求学生学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、存储结构及其相应的算法,并初步掌握算法的时间分析和空间分析技术,培养学生数据抽象的能力。
本课程主要是让我们掌握数据结构的基本概念、线性表、栈和队列、串和数组、树形结构、图结构、查找、排序等内容。
二、各章知识点概述第一章---绪论学习内容:数据结构相关的基本概念,包括数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构等;算法时间复杂度的分析。
重难点:数据结构相关的基本概念,数据结构所含两个层次的具体含义及其相互关系以及算法时间复杂度的分析方法(多重循序)。
第二章---线性表学习内容:第二章线性表主要内容是顺序表和链表的相关概念,顺序表和链表的查找、插入和删除等相关操作及其算法实现,链表的创建算法,并能够设计出线性表应用的常用算法,比如线性表的合并等;能够从时间和空间复杂度的角度比较两种存储结构的不同特点及其适用场合,明确它们各自的优缺点。
重难点:理清顺序表和链表的特点,学会用C写相关操作的代码。
第三章---栈和队列学习内容:栈和队列的特点。
顺序栈和链栈的进栈和出栈算法,以及循环队列和链队列的进队和出队算法。
重难点:学会灵活运用栈和队列解决实际应用问题,用C及栈和队列的特点写相关操作的代码。
比如表达式求值算法,理解递归算法执行过程中栈的状态变化过程,以更好地使用递归算法等。
第四章---串、数组和广义表学习内容:串的存储方法,理解串的两种模式匹配算法—BF算法和KMP算法。
明确数组和广义表这两种数据结构的特点,数组地址计算方法,几种特殊矩阵的压缩存储方法。
广义表的定义、性质及GetHead和GetTail的操作。
重难点:KMP算法;数组存储时地址的计算方法等。
第1章绪论1.1 数据结构的基本概念数据元是数据的基本单位,一个数据元素可由若干个数据项完成,数据项是构成数据元素的不可分割的最小单位。
例如,学生记录就是一个数据元素,它由学号、姓名、性别等数据项组成。
数据对象是具有相同性质的数据元素的集合,是数据的一个子集。
数据类型是一个值的集合和定义在此集合上一组操作的总称。
•原子类型:其值不可再分的数据类型•结构类型:其值可以再分解为若干成分(分量)的数据类型•抽象数据类型:抽象数据组织和与之相关的操作抽象数据类型(ADT)是指一个数学模型以及定义在该模型上的一组操作。
抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关。
通常用(数据对象、数据关系、基本操作集)这样的三元组来表示。
#关键词:数据,数据元素,数据对象,数据类型,数据结构数据结构的三要素:1.逻辑结构是指数据元素之间的逻辑关系,即从逻辑关系上描述数据,独立于计算机。
分为线性结构和非线性结构,线性表、栈、队列属于线性结构,树、图、集合属于非线性结构。
2.存储结构是指数据结构在计算机中的表示(又称映像),也称物理结构,包括数据元素的表示和关系的表示,依赖于计算机语言,分为顺序存储(随机存取)、链式存储(无碎片)、索引存储(检索速度快)、散列存储(检索、增加、删除快)。
3.数据的运算:包括运算的定义和实现。
运算的定义是针对逻辑结构的,指出运算的功能;运算的实现是针对存储结构的,指出运算的具体操作步骤。
1.2 算法和算法评价算法是对特定问题求解步骤的一种描述,有五个特性:有穷性、确定性、可行性、输入、输出。
一个算法有零个或多个的输入,有一个或多个的输出。
时间复杂度是指该语句在算法中被重复执行的次数,不仅依赖于问题的规模n,也取决于待输入数据的性质。
一般指最坏情况下的时间复杂度。
空间复杂度定义为该算法所耗费的存储空间。
算法原地工作是指算法所需辅助空间是常量,即O(1)。
第2章线性表2.1 线性表的定义和基本操作线性表是具有相同数据类型的n个数据元素的有限序列。
数据结构课程总结(精选3篇)数据结构课程总结篇1数据结构与算法是计算机程序设计的重要理论技术基础,它不仅是计算机科学的核心课程,而且也已经成为其他理工专业的热门选修课。
随着高级语言的发展,数据结构在计算机的研究和应用中已展现出强大的生命力,它兼顾了诸多高级语言的特点,是一种典型的结构化程序设计语言,它处理能力强,使用灵活方便,应用面广,具有良好的可移植性。
通过学习,先报告如下:一、数据结构与算法知识点本学期学的《数据结构与算法》这本书共有十一个章节:第一章的内容主要包括有关数据、数据类型、数据结构、算法、算法实现、C语言使用中相关问题和算法分析等基本概念和相关知识。
其中重点式数据、数据类型、数据结构、算法等概念;C语言中则介绍了指针、结构变量、函数、递归、动态存储分配、文件操作、程序测试与调试问题等内容。
第二章主要介绍的是线性逻辑结构的数据在顺序存储方法下的数据结构顺序表(包括顺序串)的概念、数据类型、数据结构、基本运算及其相关应用。
其中重点一是顺序表的定义、数据类型、数据结构、基本运算和性能分析等概念和相关知识。
二是顺序表的应用、包括查找问题(简单顺序查找、二分查找、分块查找)、排序问题(直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、归并排序)、字符处理问题(模式匹配)等内容。
本章重点和难点在查找和排序问题的算法思想上,6种排序方法的性能比较。
第三章主要介绍的是线性逻辑结构的数据在链接存储方法下数据结构链表的相关知识。
主要是单链表、循环链表的数据类型结构、数据结构、基本运算及其实现以及链表的相关应用问题,在此基础上介绍了链串的相关知识。
在应用方面有多项式的相加问题、归并问题、箱子排序问题和链表在字符处理方面的应用问题等。
本章未完全掌握的是循环链表的算法问题和C的描述。
第四章介绍在两种不同的存储结构下设计的堆栈,即顺序栈和链栈的相关知识,了解堆栈的相关应用,掌握应用堆栈来解决实际问题的思想及方法。
第一章——绪论前言(为什么会有数据结构这门课)计算机主要应用在两个方面:一个是数值计算,另一个是非数值计算。
早期的计算机只能处理数值计算(也就是数学上的运算,特点是计算过程复杂,数据类型相对简单,数据量较少),这时候人们主要通过程序设计的思想来处理处理问题。
随着计算机渗入生活,人们开始要求计算机参与处理非数值计算(特点是计算过程相对简单,数据结构相对复杂,数据的组织排列结构从某种意义上决定着非数据计算应用的有效性,数据的组织排列结构成为处理和解决数据处理问题的核心),这时候原来的程序设计以程序为中心的设计过程已经无法满足大量的非数值计算。
急需一门以复杂数据为中心,研究数据的合理组织形式,并设计出基于合理数据组织结构下的高效程序的科学来指导计算机的发展。
数据结构就是在这种环境下诞生的。
每种数据结构类型都分四个描述层次——概念层、逻辑层、存储层、运算实现层。
而数据结构往往在逻辑层上为程序抽象出算法,并对算法进行优化。
最终推出较优的指导性算法,方便后续的具体程序设计。
什么是数据结构数据结构是随着计算机科学的发展而建立起来的围绕非数值计算问题的一门科学。
准确来说,数据结构就是研究大量数据在计算机中存储的组织形式,并定义且实现对数据相应的高效运算,以提高计算机的数据处理能力的一门科学。
这里的运算主要指的是非公式化的运算,如数据存取、插入、删除、查找、排序和遍历等运算。
也就是说,数据结构是管信息管理和存储的,研究怎么存比较好,怎么管理相对比较优化。
而这里就涉及到一个问题:信息应该怎么表示,根据程序设计中介绍的思路,要在电脑中写入一个数据,应该包括它的属性和它的位置。
只要有他的位置和属性都确定了,那这个数据就完整地被存储到计算机中了。
所以,信息是由信息元素的值及信息元素之间的相互关系(逻辑顺序)和信息元素在计算机中的存储方式(物理顺序)共同组成。
逻辑结构就是代表了信息本身的属性,他是与计算机本身无关的“逻辑组织结构”它的构成是由数据的值、数据与数据之间的关联方式两个部分组成。
而存储方式则是代表他在计算机的位置,是将具有逻辑组织结构的数据在计算机的存储介质上如何存放的“物理组织结构”。
做好了逻辑和储存两方面的处理,信息才真正变成了计算机中的一个数据。
同时,根据定义,另一个问题无法忽视,什么高效运算?在我看来,高效运算指的就是算法的优化。
因为算法不仅要实现问题的要求,而且,应该是高效地完成。
低效的算法无法满足用户的需求或根本不能运用于实际。
低效的处理算法设计的程序即使运用高速运算的计算机也可能不能满足用户的处理要求。
数据结构的相关概念信息和数据的区别在哪?信息的意义更加广泛,他包括了现实中客观事物的数据集合,而数据则是单单指信息以某一特定符号表示的形式,是计算机加工的对象。
也就是说,数据是信息的特有形式,这种形式是为计算机服务的。
什么是数据元素?数据元素是数据集合中的个体,是数据组成的基本单位。
(强调的是抽象上的不可再分的最小性,并不一定指某一项,这与马克思眼中抽象的基本粒子的概念有点相似)数据结构中结构有两种:逻辑结构和物理结构1.逻辑结构(线性与非线性)逻辑结构描述数据元素与数据元素之间的关联方式,简称为关系,表示的是事物本身的内在联系。
(定义非常好了,一个关系就能说明内涵了。
这种抽象的逻辑结构,可以理解成计算机纪录我们的人际网络等方面的一个结构就好)其中的线性结构就包括线性表,堆栈和队列等,他们的共同特点是只能有一个直接前驱元素和一个直接后继元素。
所以他们元素之间的正逆关系都是“一对一”的。
关于非线性结构,这个就比较复杂了,我们的生活往往都是由非线性结构形成的。
如树形结构,图状或网状结构。
你想想你的家族族谱是不是一个树形结构?你的人际网络是不是图状的?不敢想象一个只存在线性结构的世界是怎么样的。
在这种非线性结构中,数据元素不一定存在确定的前后次序,甚至是无序的,数据元素之间存在从属、或互为从属、或离散关系。
如树型结构中,数据元素之间存在着“一对多”的从属关系。
图或网状结构中,数据元素之间存在着“多对多”的互为从属关系。
在纯集合结构中,数据元素具有“同属于一个集合”的关系。
2.物理结构定义:也称为存储结构,是逻辑结构的数据元素在计算机的物理存储空间上地映象(存储),映象不仅包含数据元素本身,而且包含着数据元素之间的关联方式,即关系的映象。
(这个定义用了什么映像,我觉得太麻烦了。
我只能直接上我自己的理解。
在我看来,存储结构就是你前面说的逻辑结构中抽象上的关系和信息本身的内容,要存在计算机中,到底应该怎么存。
怎么存才能反映出你本身的内容和原来那种关系,这种关系在计算机物理存储空间上的体现就是存储结构,也可以叫做映象(存储))映象可以分为:顺序映象和非顺序映象。
也可以叫作顺序存储和非顺序存储。
顺序存储:是指数据元素在一块连续地物理存储空间上存储,物理存储空间只用于存放数据元素值本身。
这里的顺序是空间的连续,这种存储方式直接把两个元素的关系(逻辑结构)体现在它们的相对位置关系上。
非顺序存储:是指数据元素在物理存储空间上非连续地存储,物理存储空间不仅存放数据元素本身,而且为实现数据元素之间的关联(逻辑结构),在每个数据元素存储的相邻空间中存储该数据元素关联的另一个或多个数据元素的起始地址。
用非顺序存储,数据元素之间就不一定在物理空间上相邻了,他们的逻辑关系也不再体现在物理的相邻上了,而是体现在“指针和链接”上。
这样,数据元素的逻辑结构不再被顺序的物理结构所局限,通过链表的结构,非线性结构得以被计算机存储。
3.一个数据元素应包含的区域1、数据域数据域是物理存储空间中存储数据元素中数据值的空间。
所占用的空间大小(字节数)依实际应用的数据元素中包含的信息量的大小而定。
(就是放除了关系之外的那些内在的属性的地方,如一个人的姓名等)2、链接域链接域又称指针域,是非顺序存储映象时表示数据元素之间关系的地址存储空间,是额外的空间付出。
所占用的空间大小(字节数)一般地与特定计算机的地址表示有关。
(说白了就是放地址的地方,在顺序存储结构中,物理上的相邻就已经反映了逻辑结构,也不需要指针指向下一个或者上一个指针了,自然也不存在链接域了。
)4. 存储空间分配问题怎么分配存储空间,对于顺序存储和非顺序存储,我们应该进行不一样的对待。
对于顺序存储,我们采用静态存储空间分配和释放的方法:一次性获取足够的物理存储结构,用完一次性释放。
对于非顺序存储,我们采用动态存储空间的分配和释放方法:用多少分配多少,用和存同时进行(C++中用new函数分配空间)。
释放时某个数据元素空间不使用时,立即释放。
(在C++中要用delete释放空间,C++不会主动释放空间,如果你不释放,就是在制造蠕虫病毒!!!!)5.数据类型、抽象数据类型和数据结构1.数据类型数据类型具体含义是,它描述了一组数据和在这组数据上的操作或运算及其操作或运算的接口。
2.抽象数据类型抽象数据类型是指不涉及数据值的具体表示,只涉及数据值的值域,操作或运算与具体实现无关,只描述操作或运算所满足的抽象性质的数据类型和接口。
6.算法及算法分析、算法描述定义:算法是非空的、有限的指令序列,遵循它就可以完成某一确定的任务。
在我看来,由于一个算法解决一个问题,那么他就是函数的一种非语言抽象化的表述。
而计算机运行的程序,则是一个或者多个算法具体化语言化的产物。
但程序与算法是有区别的,他们二者是一个多对一的关系。
多个程序对应同一算法,一个算法可以通过多种语言来实现。
另外,算法必须可终止,但程序不一定,程序可以在无外力的作用下一直执行下去,且可以无输入和输出。
算法必须要在具体运行细节上进行修饰才能转化成程序。
为了进一步区分程序和算法的区别,以下列出算法的五大特点:1、有穷性(不是死循环)2、确定性3、可行性(算法可行,指在计算机的运行速度的范围内运算,如果要运行个十多二十年,那么这个算法也就没有可行的意义了)4、有输入5、有输出7.程序性能一个程序的性能的好坏,主要取决于运行这个程序的时间长短和空间占用程度。
空间复杂性(空间占用程度)数据的空间复杂性包括指令空间,数据空间和环境栈空间。
指令空间就是那个编译后的文件大小,一般来说,这个无需担心。
而数据空间和环境栈空间才是影响一个程序性能的关键。
对于数据空间来说,数据元素值占用的空间是考量重点,数据元素值太多,会严重占用内存,造成程序运行的缓慢,甚至死机。
而环境栈空间中返回地址、局部变量的值、参数的值越多,调用或递归的层次越深,所需有环境栈空间就越大,就越容易耗尽环境栈空间,造成性能下降。
其中尤其以递归函数的影响最严重。
当然,这一部分的空间是可变部分,只要合理安排好递归的结构,尽量错开同时运行的时间,就可以有效降低对栈空间的消耗。
注:环境栈用来保存函数调用和返回时需要的信息的。
由于程序是由算法发展而来的。
程序性能的好坏,本质上就是反应原算法的效率问题。
时间复杂性(时间的长短)根据课本所述,程序在计算机上运算所消耗的时间主要取决于下述因素:程序运行时所需要输入的数据总量消耗的时间。
对源程序进行编译所需要的时间。
计算机执行每条机器指令所需要的时间。
程序中关键指令重复执行的次数。
前三条都是和计算机硬件相关的问题,对总的时间影响不大且不是数据结构主要要讨论的问题。
但第四个程序中关键指令重复执行的次数,对程序性能的影响常常是指数级别的。
一个优良的算法指导下写出的程序和一个普通代码指导下写出的程序,最后的时间可能天壤之别。
具体来说,时间复杂性大致上可以从两个方面估算:一是关键操作,特别是关键的循环、递归结构;二是关键步骤的执行次数,二者最终决定了时间的长短。
附:典型的复杂性函数的表示(a,b,c为已知数):常数函数:O(g(n))= O(9+12)= O(1)线性函数:O(g(n))= O(a*n+b) =O(n)对数函数:O(g(n))= O((a*n*log2n +b*n)= O(n*log2n)平方函数:O(g(n))= O(a*n2+b*n)= O(n2)指数函数:O(g(n))= O(an + b*n2+c*n)=O(an)常数函数是指算法的复杂性与算法中处理数据对象的数量(规模)无关。