数据结构是计算机存储、组织数据的方式。数据结构是指相互之Calculate::Calculate()间存在一种或多种特定关系的数据元素的。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率的算法。数据结构往往同高效的检索算法和索引技术有关。
研究数据结构就是研究 数据结构课程设计
研究数据结构就是研究 数据结构课程设计
数据结构课程: 主要目的是介绍一些常用的数据结构,阐明数据结if(op=='/') return D;构内在的逻辑关系,讨论它们在计算机中的存储表示,并结合各种数据结构,讨论对它们实行的各种运算的实现算法。很多算法实际上是对某种数据结构施行的一种变换,研究算法也就是研究在实施变换过程中数据结构的动指反映态性质。
数据结构研究的主要内容有:1、数据的逻辑结构;2、数据的存储结构;3、数据的运算。
数return true;据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素数据结构是一种计算机储存,组织数据的方式。的。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构有很多种,一般来说,按照数据的逻辑结构对其进行简单的分类,包括线性结构和非线性结构两类。
要说数据结构,就得先来说说什么是数据
数据:用来描述客观事物的符号,是计算机中作的对象,能被计算机识别,并输入给计算机处理的符号。 数据的类型不仅包含整型,实型等数值类型,还包含字符、声音、图像、视频等非数值类型。
比如在我们使用百度搜索内容时,一般会有网页、MP3、、视频等内容分类。
换句话说,数据就是符号,而这些符号必须具备两个前提条件:
对于数值类型,可以进行数值计算,对于字符类型,需要进行非数值处理,向图像、声音、视频等类型就需要通过编码等手段处理成字符数据
数据元素:是组成数据且有一定意义的基本单位,在计算机中通常作为整体处理。
比如在人类中,“人”就是数据元素
数据项:一个数据元素可以由若干个数据项组成。
比如“人”,由眼、耳、鼻、嘴、手、脚等组成。也有姓名、年龄、性别其他数据项。具体由哪些数据项要看当前数据元素和所处的系统而定
数据项是数据不可再分割的小单位。 在数据结构课程中把数据项定为小单位是为了助于更好地解决问题。但在真正讨论时,数据元素才是数据结构中建立数据模型的起点。好比我们谈论一部电影时,谈论的是电影角色这样的“数据元素”,而不是针对这个角色的姓名、年龄这样的“数据项”.(个别情况下除外)
数据对象:是性质相同的数据元素的,是数据的子集
所谓的性质相同是指数据元素具有相同数量和类型的数据项,例如“人”都有。1、数据的逻辑结构姓名、年龄、性别等相同的数据项。
Temp.Pop(op);数据对象是数据的子集。在实际应用中,处理的数据元素通常具有相同性质,在不产生混淆下,将数据对象简称为数据
主角登场
数据结构:是相互之间存在一种或多种特定关系的数据元素的
在计算机中,数据元素并不是,无序的,而是具有内在联系的数据。数据元素之间存在一种或多种特定关系,也就是数据的组织形式。所以为了写出“好”程序。必须分析待处理对象的特性及各处理对象之间存在的关系。这也是学习研究数据结构的意义所在。
下期预告: 逻辑结构与物理结构
本人乃一个数据痴迷者,在计算机的道路上,也是一个数据结构的痴迷者,现在大学里面和同学搞开发也痴迷于数据库,我就我个人的理解给你谈一谈:
if(cha[j]==out){ o=Out[j];}首先,数据结构是一门计算机语言学的基础学科,它不属于任何一门语言,其体现的是几乎所有标准语言的算法的思想。
上面的概念有一些模糊,我们现在来具体说一说,相信你门的数据结构使用的是一门具体的语言比如C/C++语言来说明,那是为了辅助的学习数据结构,而数据结构本身不属于任何语言(相信你把书上的程序敲到电脑里面是不能通过的吧,其只是描述了过程,要调试程序,还需要修改和增加一些东西)。你们的书上开始应该在讲究数据的物理存储结构/逻辑存储结构等概念,说明数据结构首先就是“数据的结构”,在内存上的存储方式,就是物理的存储结构,在程序使用人员的思想上它是逻辑的,比如:
你们在C/C++中学习到链表,那么链表是什么一个概念,你们使用指针制向下一个结点的首地址,让他们串联起来,形成一个接一个的结点,就像显示生活中的火车一样。而这只是对于程序员的概念,但是在内存中存储的方式是怎样的那?对于你程序员来说这是“透明”的,其内部分配空间在那里,都是随机的,而内存中也没有一个又一根的线将他们串联起来,所以,这是一个物理与逻辑的概念,对于我们程序员只需要知道这些就可以了,而我们主要要研究的是“逻辑结构”。
我可以给你一个我自己总结的一个概念:所有的算法必须基于数据结构生存。也就是说,我们对于任何算法的编写,必须依赖一个已经存在的数据结构来对它进行作,数据结构成为算法的作对象,这也是为什么算法和数据结构两门分类不分家的概念,算法在没有数据结构的情况下,没有任何存在的意义;而数据结构没有算法就等于是一个尸体而没有灵魂。估计这个对于算法的初学者可能有点晕,我们在具体的说一些东西吧:
我们在数据结构中简单的是什么:我个人把书籍中线性表更加细化一层(这里是为了便于理解在这样说的):单个元素,比如:int i;这个i就是一个数据结构,它是一个什么样的数据结构,就是一个类型为int的变量,我们可以对它进行加法/减法/乘法/除法/自加等等一系列作,当然对于单个元素我们对它的数据结构和算法的研究没有什么意义,因为它本来就是原子的,某些具体运算上可能算法存在比较小的异;而提升一个层次:就是我们的线性表(一般包含有:顺序表/链表)那么我们研究这样两种数据结构主要就是要研究它的什么东西那?一般我们主要研究他们以结构为单位(就是结点)的增加/删除/修改/检索(查询)四个作(为什么有这样的作,我在下面说到),我们一般把“增加/删除/修改”都把它称为更新,对于一个结点,若要进行更新一类的作比如:删除,对于顺序表来说是使用下标访问方式,那么我们在删除了一个元素后需要将这个元素后的所有元素后的所有元素全部向前移动,这个时间是对于越长的顺序表,时间越长的,而对于链表,没有顺序的概念,其删除元素只需要将前一个结点的指针指向被删除点的下一个结点,将空间使用free()函数进行释放,还原给作系统。当执行检索作的时候,由于顺序表直接使用下标进行随机访问,而链表需要从头开始访问一一匹配才可以得到使用的元素,这个时间也是和链表的结点个数成正比的。所以我们每一种数据结构对于不同的算产生不同的效果,各自没有的好,也没有的不好,他们都有自己的应用价值和方式;这样我们就可以在实际的项目开发中,对于内部的算法时间和空间以及项目所能提供的硬件能力进行综合评估,以让自己的算法能够更加好。
(在这里只提到了基于数据结构的一个方面就是:速度,其实算法的要素还应该包括:稳定性、健壮性、正确性、有穷性、可理解性、有输入和输出等等)
为什么要以结点方式进行这些乱七八糟的作那?首先明确一个概念就是:对于过程化程序设计语言所提供的都是一些基础信息,比如一些关键字/保留字/运算符/分界符。而我们需要用程序解决现实生活中的问题,比如我们要程序记录某公司人员的情况变化,那么人员这个数据类型,在程序设计语言中是没有的,那么我们需要对人员的内部信息定义(不可能完全,只是我们需要那些就定义那些),比如:年龄/性别/姓名/出生日期/民族/工作单位/职称/职务/工资状态等,那么就可以用一些C/C++语言描述了,如年龄我们就可以进行如下定义:
int age;/age变量,表示人员公司人员的年龄/
同理进行其他的定义,我们用结构体或类把他们封装成自定义数据类型或类的形式,这样用他们定义的就是一个人的对象的了,它内部包含了很多的模板数据了。
我就我个人您好,1、数据结构可以是一套理论,很像数学。也可以说和C++没关系,因为数据结构可以在任何编程语言上实现,只不过讲课的时候为了演示、试验或者加深学习,会以某种编程语言作为代码实现,比如C/C++、JAVA之类的。两个课程学习有交叉,但是数据结构对C++的要求不是特别高,有一定基础就行了,关键是对常用的数据结构和算法的学习。的经历估计的代码量应该10000以内的(我个人的:只是建议,从你的行代码开始算,不论程序正确与否,不论那一门语言,作为一个标准程序员需要十万行的代码的功底(这个是我在大学二年级感觉有一定时候的大致数据,不一定适合其他人),而十万行代码功底一般需要四门基础远支撑,若老师没有教,可以自学一些语言)。
记为:数据结构Data_Structure=(D,R)其中D是数据元素的,R是该中所有元素之间的关系的有限。
数据结构是在整个计算机科学与技术领域上广泛被使用的术语。它用来反映一个数据的内部构成,即一个数据由那些成分数据构成,以什么方式for(int i=0;i 数据结构有逻辑上的数据结构和物理上的数据结构之分。逻辑上的数据结构反映成分数据之间的逻辑关系,而物理上的数据结构反映成分数据在计算机内部的存储安排。数据结《数据结构》在计算机科学中是一门综合性的专业基础课。数据结构的研究不仅涉及到计算机硬件(特别是编码理论、存储装置和存取方法等)的研究范围,而且和计算机软件的研究有着更密切的关系,无论是编译程序还是作系统,都涉及到数据元素在存储器中的分配问题。在研究信息检索时也必须考虑如何组织数据,以便查找 存取数据元素更为方便。构是数据存在的形式。 数据结构是信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法的相对应,通过这组算法可以对数据结构中的数据进行某种作。数据结构主要研究数据的各种逻辑结构和存储结构,以及对数据的各种作。 因此,主要有三个方面的内容:数据的逻辑结构;数据的物理存储结构;对数据的作(或算法)。通常,算法的设计取决于数据的逻辑结构,算法的实现取决于数据的物理存储结构。 数据结构研究的是数据的逻辑结构和物理结构。 数据的逻辑结构反映的是数据元素之间的逻辑关系的一种数据结构,之间的逻辑关系是指数据元素之间的前后之间的关系,而不是元素所在计算机中的储存位置。 数据的物理结构是指数据结bool isOp(char c);//检测是否为作符构在计算机中的表示,也可称作映像。它包括数据元素的机内表示和关系的机内表示。 数据结构一般分为线性结构和非线性结构。 常用的数据结构有数组(包括静态Temp.Push(class Calculate{PoxfixExp[s]);数组和动态数组),栈,链表(分为单向链表,双向链表和循环链表),队列,树,图,堆,散列表等。 2、数据结构感觉很抽象但是,简单的,数组就是数据结构啊,那么与其相关的基本算法,就是增删改查、排序什么的。数据结构就是研究这些,当然还有复杂的树啊、图啊什么滴。即使你现在也会用上啊,比如排序,这个常见了,以后编写更大程序时候,要处理更多的数据,这时候到处都会用?用机器语言表达算法的运算、数据和控制十分繁杂琐碎,因为机器语言所提供的指令太初等、原始。机器语言只接受算术运算、按位逻辑运算和数的大小比较运算等。对于稍复杂的运算,都必须一一分解,直到到达初等的运算才能用相应的指令替代之。机器语言能直接表达的数据只有原始的位、字节、和字三种。算法中即使是简单的数据如布尔值、字符、整数、和实数,也必须一一地映射到位、字节和字到。 何谓数据结构 ?数据结构是在整个计算机科学与技术领域上广泛被使用的术语。它用来反映一个数据的内部构成,即一个数据由那些成分数据构成,以什么方式构成,呈什么结构。数据结构有逻辑上的数据结构和物理上的数据结构之分。逻辑上的数据结构反映成分数据之间的逻辑关系,而物理上的数据结构反映成分数据在计算机内部的存储安排。数据结构是数据存在的形式。 数据结构是信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法的相对应,通过这组算法可以对数据结构中的数据进行某种作。 ?数据结构主要研究什么? ?数据结构作为一门学科主要研究数据的各种逻辑结构和存储结构,以及对数据的各种作。因此,主要有三个方面的内容:数据的逻辑结构;数据的物理存储结构;对数据的作(或算法)。通常,算法的 ?设计取决于数据的逻辑结构,算法的实现取决于数据的物理存储结构。 ?什么是数据结构?什么是逻辑结构和物理结构? ?数据是指由有限的符号(比如,"0"和"1",具有其自己的结构、作、和相应的语义)组成的元素的。结构是元素之间的关系的。通常来说,一个数据结构DS 可以表示为一个二元组: ?DS=(D,S), //i.e., data-structure=(data-part,logic-structure-part) 这里D是数据元素的(或者是“结点”,可能还含有“数据项”或“数据域”),S是定义在D(或其他)上的关系的,S = { R | R : D×D×...},称之为元素的逻辑结构。 逻辑结构有四种基本类型:结构、线性结构、树状结构和网络结构。表和树是常用的两种高效数据结构,许多高效的算法可以用这两种数据结构来设计实现。表是线性结构的(全序关系),树(偏序或层次关系)和图(局部有序(weak/local orders))是非线性结构。 ?数据结构的物理结构是指逻辑结构的存储镜像(image)。数据结构 DS 的物理结构 P对应于从 DS 的数据元素到存储区M(维护着逻辑结构S)的一个映射: ?因此,我们至少可以得到4×4种可能的物理数据结构: ?sequential (sets) linked lists hash graphs ?(并不是所有的可能组合都合理) ???? 数据结构DS上的作:所有的定义在DS上的作在改变数据元素()或的域时必须保持DS的逻辑和物理结构。 ?DS上的基本作:任何其他对DS的高级作都可以用这些基本作来实现。将DS和他的所有基本作看作一个整体——称之为模块。我们可以进一步将该模块抽象为数据类型(其中DS的存储结构被表示为私有成员,基本作被表示为公共方法),称之为ADT。作为ADT,堆栈和队列都是一种特殊的表,他们拥有表的作的子集。 对于DATs的高级作可以被设计为(不封装的)算法,利用基本作对DS进行处理。 ?好的和坏的DS:如果一个DS可以通过某种“线性规则”被转化为线性的DS(例如线性表),则称它为好的DS。好的DS通常对应于好的(高效的)算法。这是由计算机的计算能力决定的,因为计算机本质上只能存取逻辑连续的内存单元,因此如何没有线性化的结构逻辑上是不可计算的。比如对一个图进行作,要访问图的所有结点,则必须按照某种顺序来依次访问所有(要形成一个偏序),必须通过某种方式将图固有的非线性结构转化为线性结构才能对图进行作。 ?树是好的DS——它有非常简单而高效的线性化规则,因此可以利用树设计出许多非常高效的算法。树的实现和使用都很简单,但可以解决大量特殊的复杂问题,因此树是实际编程中重要和有用的一种数据结构。树的结构本质上有递归的性质——每一个叶可以被一棵子树所替代,反之亦然。实际上,每一种递归的结构都可以被转化为(或等价于)树形结构。 ?从机器语言到高级语言的抽象 ?我们知道,算法被定义为一个运算序列。这个运算序列中的所有运算定义在一类特定的数据模型上,并以解决一类特定问题为目标。这个运算序列应该具备下列四个特征。 有限性,即序列的项数有限,且每一运算项都可在有限的时间内完成;确定性,即序列的每一项运算都有明确的定义,无二义性;可以没有输入运算项,但一定要有输出运算项;可行性,即对于任意给定的合法的输入都能得到相应的正确的输出。这些特征可以用来判别一个确定的运算序列是否称得上是一个算法。 但是,我们现在的问题不是要判别一个确定的运算序列是否称得上是一个算法,而是要对一个己经称得上是算法的运算序列,回顾我们曾经如何用程序设计语言去表达它。 ?算法的程序表达,归根到底是算法要素的程序表达,因为一旦算法的每一项要素都用程序清楚地表达,整个算法的程序表达也就不成问题。 ?作为运算序列的算法,有三个要素。 作为运算序列中各种运算的运算对象和运算结果的数据;运算序列中的各种运算;运算序列中的控制转移。这三种要素依序分别简称为数据、运算和控制。 由于算法层出不穷,变化万千,其中的运算所作用的对象数据和所得到的结果数据名目繁多,不胜枚举。简单基本的有布尔值数据、字符数据、整数和实数数据等;稍复杂的有向量、矩阵、记录等数据;更复杂的有、树和图,还有声音、图形、图像等数据。 同样由于算法层出不穷,变化万千,其中运算的种类五花八门、多姿多彩。基本初等的有赋值运算、算术运算、逻辑运算和关系运算等;稍复杂的有算术表达式和逻辑表达式等;更复杂的有函数值计算、向量运算、矩阵运算、运算,以及表、栈、队列、树和图上的运算等:此外,还可能有以上列举的运算的复合和嵌套。 关于控制转移,相对单纯。在串行计算中,它只有顺序、分支、循环、递归和无条件转移等几种。 ?早的程序设计语言是机器语言,即具体的计算机上的一个指令集。当时,要在计算机上运行的所有算法都必须直接用机器语言来表达,计算机才能接受。算法的运算序列包括运算对象和运算结果都必须转换为指令序列。其中的每一条指令都以编码(指令码和地址码)的形式出现。与算法语言表达的算法,相十万八千里。对于没受过程序设计专门训练的人来说,一份程序恰似一份"天书",让人看了不知所云,可读性 ?极。 中,还得一一分配它们的存储单元。对于算法中有结构的数据的表达则要麻烦得多。机器语言所提供的控制转移指令也只有无条件转移、条件转移、进入子程序和从子程序返回等基本的几种。用它们来构造循环、形成分支、调用函数和过程得事先做许多的准备,还得靠许多的技巧。 直接用机器语言表达算法有许多缺点。 ?大量繁杂琐碎的细节牵制着程序员,使他们不可能有更多的时间和精力去从事创造性的劳动,执行对他们来说更为重要的任务。如确保程序的正确性、高效性。程序员既要驾驭程序设计的全局又要深入每一个局部直到实现的细节,即使智力超群的程序员也常常会顾此失彼,屡出错,因而所编出的程序可靠性,且开发周期长。 由于用机器语言进行程序设计的思维和表达方式与人们的习惯大相径庭,只有经过 ?诚然,算法终要表达为具体计算机上的机器语言才能在该计算机上运行,得到所需要的结果。但汇编语言的实践启发人们,表达成机器语言不必一步到位,可以分两步走或者可以筑桥过河。即先表达成一种中介语言,然后转成机器语言。汇编语言作为一种中介语言,并没有获得很大成功,原因是它离算法语 ?言还太远。这便指引人们去设计一种尽量接近算法语言的规范语言,即所谓的高级语言,让程序员可以用它方便地表达算法,然后借助于规范的高级语言到规范的机器语言的"翻译",终将算法表达为机器语言。而且,由于高级语言和机器语言都具有规范性,这里的"翻译"完全可以机械化地由计算机来完成,就像汇编语言被翻译成机器语言一样,只要计算机配上一个编译程序。 上述两步,前一步由程序员去完成,后一步可以由编译程序去完成。在规定清楚它们各自该做什么之后,这两步是完全的。它们各自该如何做互不相干。前一步要做的只是用高级语言正确地表达给定的算法,产生一个高级语言程序;后一步要做的只是将步得到的高级语言程序翻译成机器语言程序。至于程序员如何用高级语言表达算法和编译程序如何将高级语言表达的算法翻译成机器语言表达的算法,显然毫不相干。 ?处理从算法语言终表达成机器语言这一复杂过程的上述思想方法就是一种抽象。汇编语言和高级语言的出现都是这种抽象的范例。 与汇编语言相比,高级语言的巨大成功在于它在数据、运算和控制三方 ?面的表达中引入许多接近算法语言的概念和工具,大大地提高抽象地表达算法的能力。 在运算方面,高级语言如Pascal,除允许原封不动地运用算法语言的四则运算、逻辑运算、关系运算、算术表达式、逻辑表达式外,还引入强有力的函数与过程的工具,并让用户自定义。这一工具的重要性不仅在于它精简了重复的程序文本段,而且在于它反映出程序的两级抽象。 ?在函数与过程调用级,人们只关心它能做什么,不必关心它如何做。只是到函数与过程的定义时,人们才给出如何做的细节。用过高级语言的读者都知道,一旦函数与过程的名称、参数和功能被规定清楚,那么,在程序中调用它们便与在程序的头部说明它们完全分开。你可以修改甚至更换函数体与过程体,而不影响它们的被调用。如果把函数与过程名看成是运算名,把参数看成是运算的对象或运算的结果,那么 ?,函数与过程的调用和初等运算的引用没有两样。利用函数和过程以及它们的复合或嵌套可以很自然地表达算法语言中任何复杂的运算。 ?在数据方面,高级语言如Pascal引人了数据类型的概念,即把所有的数据加以分类。每一个数据(包括表达式)或每一个数据变量都属于其中确定的一类。称这一类数据为一个数据类型。 因此,数据类型是数据或数据变量类属的说明,它指示该数据或数据变量可能取的值的全体。对于无结构的数据,高级语言如Pascal,除提供标准的基本数据类型--布尔型、字符型、整型和实型外,还提供用户可自定义的枚举类、子界类型和指针类型。这些类型(除指针外),其使用方式都顺应人们在算法语言中使用的习惯。对于有结构的数据,高级语言如Pascal,提供了数组、记录、有限制的和文件等四种标准的结构数据类型。其中,数组是科学计算中的向量、矩阵的抽象;记录是商业和管理中的记录的抽象;有限制的是数学中足够小的的势集的抽象;文件是诸如磁盘等外存储数据的抽象。 ?人们可以利用所提供的基本数据类型(包括标准的和自定义的),按数组、记录、有限制的和文件的构造规则构造有结构的数据。 此外,还允许用户利用标准的结构数据类型,通过复合或嵌套构造更复杂更高层的结构数据。这使得高级语言中的数据类型呈明显的分层。 高级语言中数据类型的分层是没有穷尽的,因而用它们可以表达算法语言中任何复杂层次的数据。 在控制方面,高级语言如Pascal,提供了表达算法控制转移的六种方式。 ?(1)缺省的顺序控制";"。 ?(2)条件(分支)控制:"if表达式(为真)then S1 else S2;" 。 ?(3)选择(情况)控制: ?"Case 表达式 of ?值1: S1 值2: S2 ... 值n: Sn end" ?(4)循环控制: ?"while 表达式(为真) do S;" 或 "repeat S until 表达式(为真);" 或 "for变量名:=初值 to/downto 终值do S;" ?数据结构、数据类型和抽象数据类型 ?数据结构、数据类型和抽象数据类型,这三个术语在字面上既不同又相近,反映出它们在含义上既有区别又有联系。 ?数据结构是在整个计算机科学与技术领域上广泛被使用的术语。它用来反映一个数据的内部构成,即一个数据由哪些成分数据构成,以什么方式构成,呈什么结构。数据结构有逻辑上的数据结构和物理上的数据结构之分。逻辑上的数据结构反映成分数据之间的逻辑关系,物理上的数据结构反映成分数据在计算机内的存储安排。数据结构是数据存在的形式。 ?数据是按照数据结构分类的,具有相同数据结构的数据属同一类。同一类数据的全体称为一个数据类型。在程序设计高级语言中,数据类型用来说明一个数据在数据分类中的归属。它是数据的一种属性。这个属性限定了该数据的变化范围。为了解题的需要,根据数据结构的种类,高级语言定义了一系列的数据类型。不同的高级语言所定义的数据类型不尽相同。Pascal语言所定义的数据类型的种类。 ?其中,简单数据类型对应于简单的数据结构;构造数据类型对应于复杂的数据结构;在复杂的数据结构里,允许成分数据本身具有复杂的数据结构,因而,构造数据类型允许复合嵌套;指针类型对应于数据结构中成分数据之间的关系,表面上属简单数据类型,实际上都指向复杂的成分数据即构造数据类型中的数据,因此这里没有把它划入简单数据类型,也没有划入构造数据类型,而单独划出一类。 ?数据结构反映数据内部的构成方式,它常常用一个结构图来描述:数据中的每一项成分数据被看作一个结点,并用方框或圆圈表示,成分数据之间的关系用相应的结点之间带箭号的连线表示。如果成分数据本身又有它自身的结构,则结构出现嵌套。这里嵌套还允许是递归的嵌套。 ?由于指针数据的引入,使构造各种复杂的数据结构成为可能。按数据结构中的成分数据之间的关系,数据结构有线性与非线性之分。在非线性数据结构中又有层次与网状之分。 由于数据类型是按照数据结构划分的,因此,一类数据结构对应着一种数据类型。数据类型按照该类型中的数据所呈现的结构也有线性与非线性之分,层次与网状之分。一个数据变量,在高级语言中的类型说明必须是读变量所具有的数据结构所对应的数据类型。常用的数据结构是数组结构和记录结构。数组结构的特点是: ?成分数据的个数固定,它们之间的逻辑关系由成分数据的序号(或叫数组的下标)来体现。这些成分数据按照序号的先后顺序一个挨一个地排列起来。每一个成分数据具有相同的结构(可以是简单结构,也可以是复杂结构),因而属于同一个数据类型(相应地是简单数据类型或构造数据类型)。这种同一的数据类型称为基类型。所有的成分数据被依序安排在一片连续的存储单元中。 概括起来,数组结构是一个线性的、均匀的、其成分数据可随机访问的结构。 ?抽象数据类型的含义在上一段已作了专门叙述。它可理解为数据类型的进一步抽象。即把数据类型和数据类型上的运算捆在一起,进行封装。引入抽象数据类型的目的是把数据类型的表示和数据类型上运算的实现与这些数据类型和运算在程序中的引用隔开,使它们相互。对于抽象数据类型的描述,除了必须描述它的数据结构外,还必须描述定义在它上面的运算(过程或函数)。抽象数据类型上定义的过程和函 数以该抽象数据类型的数据所应具有的数据结构为基础。 ?泛型设计和数据结构与算法 ?下面我想再说说关于泛型程序设计模型对于数据结构和算法方面的推动,泛型思想已经把数据结 ?构和算法方面的基本思想抽象到了一个前所未有的高度,现在有多种程序设计语言支持泛型设计,比如 ADA,C++,而且据说在JAVA的下一版本和C#中也将对泛型设计进行全面的支?(6)无条件转移goto。持。 ?先说说泛型设计的基本思想:泛型编程(generic programming,以下直接以GP称呼)是一种全新的程序设计思想,和OO,OB,PO这些为人所熟知的程序设计想法不同的是GP抽象度更高,基于GP设计的组件之间偶合度底,没有继承关系,所以其组件间的互交性和扩展性都非常高。我们都知道,任何算法都是作用在一种特定的数据结构上的,简单的例子就是快速排序算法根本的实现条件就是所排序的对象是存 贮在数组里面,因为快速排序就是因为要用到数组的随机存储特性,即可以在单位时间内交换远距离的对象,而不只是相临的两个对象,而如果用联表去存储对象,由于在联表中取得对象的时间是线性的既O[n],这样将使快速排序失去其快速的特点。也就是说,我们在设计一种算法的时候,我们总是先要考虑其应用的数据结构,比如数组查找,联表查找,树查找,图查找其核心都是查找,但因为作用的数据结构不同 ?将有多种不同的表现形式。数据结构和算法之间这样密切的关系一直是我们以前的认识。泛型设计的根本思想就是想把算法和其作用的数据结构分离,也就是说,我们设计算法的时候并不去考虑我们设计的算法将作用于何种数据结构之上。泛型设计的理想状态是一个查找算法将可以作用于数组,联表,树,图等各种数据结构之上,变成一个通用的,泛型的算法。这样的理想是不是很人? ?泛型编程带来的是前所未有的弹性以及不会损失效率的抽象性,GP和OO不同,它不要求你通过额外的间接层来调用函数:它让你撰写完全一般化并可重复使用的算法,其效率与针对特定数据结构而设计的算法旗鼓相当。我们大家都知道数据结构在C++中可以用用户定义类型来表示,而C++中的模板技术就是以类型作为参数,那么我可以想象利用模板技术可以实现我们开始的GP思想,即一个模板函数可以对于各种传递进来的类型起作用,而这些类型就可以是我们定义的各种数据结构。 ?泛型算法抽离于特定类型和特定数据结构之外,使得其适应与尽可能的一般化类型,算法本身只是为了实现算法其需要表达的逻辑本质而不去被为各种数据结构的实现细节所干扰。这意味着一个泛型算法实际具有两部分。1,用来描叙算法本质逻辑的实际指令;2,正确指定其参数类型必须满足的性质的一组需求条件。到此,相信有不少人已经开始糊涂了,呵呵,不要紧。毕竟GP是一种抽象度非常高的程序设计思想,里面的核心就是抽象条件成为成为程序设计过程中的核心,从而取代了类型这在OO里面的核心地位,正是因为类型不在是我们考虑的重点,类型成为了抽象条件的外衣,所以我们称这样的程序思想为泛型思想------把类型泛化。 数据结构是计算机存储、组织数据的方式。 数据的逻辑结构和储存结构是数据结构的两个密切相关的方面,同一逻辑结构可以对应不同的存储结构。算法的设计取决于数据的逻辑结构,而算法的实现依赖于指定的存储结构。 数据结构的研究内容是构造复杂软件系统的基础,它的核心技术是分解与抽象。通过分解可以划分出数据的3个层次;再通过抽象,舍弃数据元素的具体内容,就得到逻辑结构。类似地,通过分解将处理要求划分成各种功能,再通过抽象舍弃实现细节,就得到运算的定义。 数据的物理结构介绍: 数据的物理结构是数据结构在计算机中的表示(又称映像),它包括数据元素的机内表示和关系的机内表示。由于具体实现的方法有顺序、链接、索引、散列等多种,所以,一种数据结构可表示成一种或多种存储结构。 数据元素的机内表示(映像方法):用二进制位(bit)的位串表示数据元素。通常称这种位串为(node)。当数据元素有若干个数据项组成时,位串中与各个数据项对应的子位串称为数据域(datafield)。因此,是数据元素的机内表示(或机内映像)。 以上内容参考: 数据结构包括 数据的逻辑结构 、数据的物理结构 、数据 存储结构 数据元素 之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。 2、数据的物理结构 数据的物理结构是数据结构在计算机中的表示(又称映像),它包括数据元素的机内表示和关系的机内表示。由于具体实现的方法有顺序、链接、索引、 散列 等多种,所以,一种数据结构可表示成一种或多种存储结构。 3、数据存储结构 数据的逻辑结构在计算机存储空问中的存放形式称为数据的物理结构(也称为存储结构)。一般来说,一种数据结构的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序存储、链式存储、索引存储和哈希存储等。 扩展资料: 数据结构研究的内容:就是如何按一定的逻辑结构,把 数据组织 起来,并选择适当的存储表示方法把逻辑结构组织好的数据存储到计算机的存储器里。 研究的目的是为了更有效的处理数据,提高 数据运算 效率。数据的运算是定义在数据的逻辑结构上,但运算的具体实现要在存储结构上进行。一般有以下几种常用运算: 1、检索。检索就是在数据结构里查找满足一定条件的。一般是给定一个某字段的值,找具有该字段值的。 2、插入。往数据结构晕增加新的。 3、删除。把指定的结点从数据结构中去掉。 4、更新。改变指定的一个或结构。简单理解就是关系,比如分子结构,就是组成分子的原子之间排列的方式。严格来说,结构是指各个 组成部分相互搭配和排列的方式。现实世界中, 不同元素之间不是的,而是存在特定关系,我们将这些关系成为结构。多个字段的百度百科值。 5、排序。把按某种指定的顺序重新排列。例如递增或递减。 参考资料来源: —数据结构数据结构是研讨数据的什么和什么
C++数据结构问题
较长时间职业训练的程序员才能胜任,使得程序设计曲高和寡。因为它的书面形式全是"密"码,所以可读性,不便于交流与合作。因为它地依赖于具体的计算机,所以可移植性,重用性。这些弊端造成当时的计算机应用未能迅速}while(!Temp.isEmpty())//继续读取栈内元素得到推广。数据结构
2、数据的物理结构:指数据的逻辑结构在计算机存储空间的存放形式。数据结构是什么
数据结构是指相互之间存在一种或多种特定关系的数据元素的。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率?克服上述缺点的出路在于程序设计语言的抽象,让它尽可能地接近于算法语言。 为此,人们首先注意到的是可读性和可移植性,因为它们相对地容易通过抽象而得到改善。于是,很快就出现汇编语言。这种语言对机器语言的抽象,首先表现在将机器语言的每一条指令符号化:指令码代之以记忆符号,地址码代之以符号地址,使得其含义显现在符号上而不再隐藏在编码中,可让人望"文"生义。其次表现在这种语言摆脱了具体计算机的限制,可在不同指令集的计算机上运行,只要该计算机配上汇编语言的一个汇编程序。这无疑是机器语言朝算法语言靠拢迈出的一步。但是,它离算法语言还太远,以致程序员还不能从分解算法的数据、运算和控制到汇编才能直接表达的指令等繁杂琐碎的事务中解脱出来。 到了50年代中期,出现程序设计的高级语言如Fortran,Algol60,以及后来的PL/l, Pascal等,算法的程序表达才产生一次大的飞跃。。数据结构往往同高效的检索算法和索引技术有关。数据结构包括哪几个方面的内容
}template
版权声明:本文内容由互联。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发 836084111@qq.com 邮箱删除。