数据结构的概念.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE 2数据结构教程与题解 PAGE 2 PAGE 3第1章 STYLEREF 标题 1 概论 PAGE 3 1章第 1章 第 概论 随着计算机的普及和软硬件技术的发展,计算机的应用越来越广泛,但不管计算机作何用途,每一项应用总是某个程序的运行。所以,用计算机解决任何问题都离不开程序设计,而程序设计的实质就是数据的表示和数据的处理,数据结构就是研究这两个方面的一些基本问题的,包括如何组织数据、数据元素之间是什么关系、数据在计算机中如何表示以及如何对数据进行操作等。数据结构对设计高性能程序和软件至关重要。 本章介绍了数据结构的基本概念,包括数据的逻辑结构、存储结构、基本运算和运算的实现以及算法分析等。 1.1 引言 在现实生活中,当我们谈到事物的“结构”时,一般是指它由哪些部分组成,各部分之间的相互关系如何等,如对于计算机课程的体系结构,我们会关心它有哪些课程、各课程之间的关系如何等。所以,对“数据结构”这个概念,从字面上可以理解为数据的组成和相互间的关系,或称数据的组织形式。不过这并不全面,因为数据结构中还应包含数据的相关操作。本章后面会逐步对数据结构进行解释,其中会涉及很多相关概念。这里先看另一个问题:我们为什么要学习数据结构?或者说学习数据结构有什么用? 简单地说,学习数据结构是我们编程的需要。这是因为,不论什么程序,它本质上都是计算机对某种数据的加工处理,计算机相当于一个处理机,数据是它加工处理的“原料”。这里涉及两个基本问题:首先,数据要存储到计算机中,才能被计算机加工处理;其次,如何对数据进行处理。前一个问题称为数据表示,后一个问题称为数据处理。所以,程序设计的实质就是数据的表示和数据的处理。 数据在计算机存储器内的存在形式称为机内表示,这之前的数据表现形式称为机外表示,所以数据表示的工作就是将数据从机外表示转化为机内表示。在数据表示中,不是简单地将数据的值存储到计算机中就可以了,还要直接或间接地存储数据之间的相互关系,对关系的表示常常是一些复杂问题的关键。数据处理的工作就是用计算机可执行语句编制程序,描述对已存入计算机的数据进行各种具体操作,继而完成整个处理任务。数据结构就是研究程序设计过程中数据表示和数据处理这两个方面的一些基本问题的。 或许有人会问:我们以前学习高级语言如C/C++语言时,并没有学过数据结构,不是一样也编出了很多程序并且运行得很好吗?这里有一个认识问题。首先,我们在学习高级语言时所编制的程序基本上是属于数值计算型的,如级数求和、方程求根等,所涉及的运算对象比较简单,如整数、实数等,数据结构的问题不明显;其次,即便如此,我们在编程中也不知不觉地、或多或少地使用了数据结构的一些知识或方法。最后,从数据结构的观点看,即使是一个单独的数据,如一个整数或字符,也可看成一个简单的数据结构。 下面先看一个简单的例子。 例1.1 方程求根: f(x)=a2x2+a1x+a0=0 解:首先要把方程的系数存入计算机,如用3个变量a0、a1、a2表示,然后才能进行具体的求根计算。这就是我们在学习高级语言时一般采用的方法。但对一般形式的方程: f(x)=anxn+an–1xn–1+…+a1x+a0=0 我们一般就不会对每个系数都用单独的变量名来表示了,因为变量多,对名字的管理和书写都很不方便,如20次的多项式,就需要21个变量名。这时,我们一般会用一个数组如A[21]来集中存放这些系数,这样只需记住一个名字,即数组名,然后通过数组下标来区分各个系数,如A[i]表示ai。这里,数组就是数据结构中一种比较简单的存储结构——顺序存储结构,它将各个元素在存储空间上连续存放。 如果多项式的次数不定,上述方法又有问题,如C/C++等语言中数组的大小一经定义后就不能再变化,这时,如果数组定义得较大,而多项式的次数低,实际系数少,数组空间就有浪费现象;反之,如果数组定义得较小,而多项式的次数高,实际系数多,数组空间就可能不足而产生溢出。为适应数据个数变化的情况,我们可用内存分配函数为每个系数动态分配空间,并通过指针将它们联系起来,即得到链表。这里,链表也是数据结构中常用的一种存储结构——链式存储结构。 如果再考虑到多项式的系数中通常有很多为零,为了节省存储空间,并和书写习惯一致,我们可不存储零系数,但这时要把非零系数和原多项式之间的关系表示清楚,就涉及数据的压缩存储问题,也是数据结构里要研究的内容。 在上面存放各系数时,不论数组还是链表,我们显然不会胡乱存储,而是很自然地按照系数间的“前后”次序,即按对应项的次数从高到低或从低到高来进行。这实际上说明了这样一个问题:这些系数间是有相互关系的,对本问题,它们按次数的高低顺序形成一个有穷序列(a0, a1, a2, …, an),对任一个系数ai,排在它前面的与之相邻

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档