【算法笔记】数据结构(一)

数据结构是数据的组织形式,可以用来表征特定的对象数据。在计算机程序设计中,操作的对象是各式各样的数据,这些数据往往拥有不同的数据结构,例如数组、接口、类等。而算法和数据结构具有千丝万缕的联系,计算机科学家尼克劳斯·沃思(Nikiklaus Wirth)提出“数据结构+算法=程序”的著名公式。这是因为不同的数据结构所采用的处理方法不同,计算的复杂程度也不同,因此算法往往是依赖于某种数据结构的,即数据结构是算法实现的基础。

数据结构是计算机中对数据的一种存储和组织方式,同时也泛指相互之间存在一种或多种特定关系的数据的集合。数据结构是计算机艺术的一种体现,合理的数据结构能够提高算法的执行效率,还可以提高数据的存储效率。

数据结构是计算机程序设计的产物,其实,到现在为止,计算机技术领域中还没有一个统一的数据结构的定义。不同的专家往往对数据结构有不同的描述,以下就是几种典型的定义。

“数据结构是数据对象、存在于该对象的实例以及组成实例的元素之间的各种关系,并且这种关系可以通过定义相关的函数来给出。”这是Sartaj Sahni在其经典著作《数据结构、算法与应用》一书中提出的,他将数据对象定义为一个实例或值的集合。

“数据结构是抽象数据类型ADT的物理实现。”这是Clifford A.Shaffer在其《数据结构、算法与应用》一书中定义的。其中抽象数据类型ADT,英文全称Abstract Data Type,简称ADT。抽象数据类型ADT的概念我们将在后面讲到。

LobertL.Kruse也给出了数据结构设计过程的概念,他认为一个数据结构的设计过程可以分为抽象层、数据结构层和现实层。其中,抽象层是指抽象数据类型层,也就是ADT层,主要讨论数据的逻辑结构及其运算;数据结构层讨论一个数据结构的表示;实现层讨论一个数据结构在计算机内的存储细节以及运算的实现。

虽然业界没有一个统一的定义,但是这些定义都是具有相同的含义的。我们在这里只需要了解数据结构的基本定义,并能够使用其解决问题即可。我们可以这样简单地理解数据结构,一个数据结构是由数据元素依据某种逻辑联系组织起来的,对数据元素间逻辑关系的描述称为数据的逻辑结构。由于数据必须在计算机内存储,数据的存储结构是其计算机内的表示,也就是数据结构的实现形式。另外,讨论一个数据结构,必须涉及该类数据上执行的运算。

数据结构是一切算法的基础,而且不仅如此,数据结构可以说是程序设计语言的基础。正是由于对数据结构的深入理解,才导致多种多样的程序设计语言的诞生,例如Java、C++、C#等。其中,面向对象的程序设计语言就是完善处理对象类型数据结构的范例,这在某些方面可以方便地描述和解决实际问题。

数据结构中的基本概念

深入了解数据结构之前,我们需要简单掌握一下数据结构中涉及的一些基本概念,主要包括如下几个:

■数据(Data):数据是信息的载体,其能够被计算机识别、存储和加工处理,是计算机程序加工的“原材料”。数据包括的类型是非常广的,例如基本的整形、字符、字符串、实数等,此外,图像和声音等也都可以认为是一种数据。

■数据元素(Data Element):数据元素是数据的基本单位,其也称元素、结点、顶点、记录等。一般来说,一个数据元素可以由若干个数据项组成,数据项是具有独立含义的最小标识单位。数据项也可称为字段、域、属性等。

■数据结构(Data Structure):数据结构指的是数据之间的相互关系,也就是数据的组织形式。

数据结构的内容

       数据结构包括三个方面的内容,数据的逻辑结构、数据的存储结构和数据的运算。下面就将分析这三个方面的内容。

■数据的逻辑结构(Logical Structure):也就是数据元素(Data Element)之间的逻辑关系。数据的逻辑结构是从逻辑关系上描述数据结构的,与数据在计算机中是如何存储无关的,也就是独立于计算机的抽象概念。从数学分析的角度来看,数据的逻辑结构可以看做是从具体问题抽象出来的数学模型。

■数据的存储结构(Storage Structure):也就是数据元素(Data Element)及其逻辑关系在计算机存储器中的表示形式。数据的存储结构依赖于计算机语言,是逻辑结构用于计算机语言的实现。一般来说,只有在高级语言的层次上才会讨论存储结构,在低级的机器语言中,存储结构的具体的。

■数据的运算:也就是能够对数据施加的操作。数据的运算其基础在于数据的逻辑结构上,每种逻辑结构都可以归纳一个运算的集合。在数据结构范畴内,最常用的运算包括检索、插入、删除、更新、排序等。

其实,数据的逻辑结构、数据的存储结构和数据的运算时一个整体,独立地去理解这三者中的任何一个人都是不全面的。这主要表现在如下几方面。

□同一个逻辑结构可以有不同的存储结构。

逻辑结构和存储结构是两个概念,同一个逻辑结构可以由不同的存储结构。例如,线性表是最简单的一种逻辑结构,如果线性表采用顺序方式存储,这种数据结构就是顺序表;如果线性表采用链式方式存储,这种数据结构就是链表;如果线性表采用散列方式存储,这种数据结构就是散列表。

□同一种逻辑结构也可以有不同的数据运算集合。

数据的运算是数据结构中十分重要的内容。一个相同的数据逻辑结构和存储结构,而采用不同的运算集合及运算性质,将导致全新的数据结构。例如线性表,如果将线性表的插入运算限制在表的一段,而删除操作限制在表的另一端,那么这种数据结构就是队列;如果将线性表的插入和删除操作都限制在表的同一段,那么这种数据结构就是栈。

数据结构中的这三方面是一个有机的整体,缺一不可。数据的逻辑结构、数据的存储结构和数据的运算任何一个发生变化都将导致一个全新的数据结构出现。

【转载使用,请注明出处:http://blog.csdn.net/mahoking

【转载使用,请注明出处:http://blog.csdn.net/mahoking

时间: 2024-11-05 11:00:34

【算法笔记】数据结构(一)的相关文章

[数据结构和算法]折半插入排序算法笔记

/// <summary> /// 步骤: /// 1.记录当前待排元素 /// 2.标记顺序表有序查找区域下界和上界 /// 3.在顺序表有序查找区域中折半查找等待排序元素的位置 /// 4.把顺序表有序查找区域的某些元素后移一位,以空出位置给等待排序的元素 /// 5.在空出的位置填写当前排序元素 /// </summary> /// <param name="elements"></param> static void SqList

[学习笔记]数据结构与算法

1.排序简单排序:?冒泡排序:将n个数从上往下排列,从第0个数开始依次对前n个.前n-1个.前n-2个数进行比较,保持小数在前大数在后,不符合就交换.在这个过程中,最后一个数始终是最大数.?选择排序:对所有n个.后n-1个.后n-2个依次比较,用一个变量存最小数,一趟比较完成之后,将最小数与所比较数据的第一个数进行交换.在这个过程中,第一个数始终是最小数.?插入排序:从第1个数开始向前扫描比较,小则插入.对于未排序数据,在已排序序列中向前扫描,并找到相应的位置插入.在这个过程中,整个序列局部有序

数据结构与算法笔记 - 绪论

数据结构与算法笔记 - 绪论 1. 什么是计算2. 评判DSA优劣的参照(直尺)3. 度量DSA性能的尺度(刻度)4. DSA的性能度量的方法5. DSA性能的设计及其优化 x1. 理论模型与实际性能的差异x2. DSA优化的极限(下界) 计算机与算法 计算机科学(computer science)的核心在于研究计算方法与过程的规律,而不仅仅是作为计算工具的计算机本身,因此E. Dijkstra及其追随者更倾向于将这门科学称作计算科学(computing science). 计算 = 信息处理

浅谈算法和数据结构

: 一 栈和队列 http://www.cnblogs.com/yangecnu/p/Introduction-Stack-and-Queue.html 最近晚上在家里看Algorithems,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且“图码并茂”,趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因.另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的. 计算

【转载】浅谈算法和数据结构: 一 栈和队列

作者:yangecnu(yangecnu's Blog on 博客园) 出处:http://www.cnblogs.com/yangecnu/ 最近晚上在家里看Algorithms,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且“图码并茂”,趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因.另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的. 计算机程序离不开

浅谈算法和数据结构: 一 栈和队列

最近晚上在家里看Algorithems,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且"图码并茂",趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因.另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的. 计算机程序离不开算法和数据结构,本文简单介绍栈(Stack)和队列(Queue)的实现,.NET中与之相关的数据结构,典型应用等,希望能加深自己对这

浅谈算法和数据结构(1):栈和队列

浅谈算法和数据结构(1):栈和队列 2014/11/03 ·  IT技术                                         · 2 评论                                      ·  数据结构, 栈, 算法, 队列 分享到: 60 SegmentFault D-Day 2015 北京:iOS 站 JDBC之“对岸的女孩走过来” CSS深入理解之relative HTML5+CSS3实现春节贺卡 原文出处: 寒江独钓   欢迎分享原创

算法笔记1-最大子序列和问题的求解

问题-- 给定N个整数(有可能是负数)A1,A2,A3,A4...An,求最大子序列和. (子序列必须是连续的):比如,对于输入,-2,11,-4,13,-5,-2:这个序列, 答案是20,即从A2到A4. 对于这个问题,你怎么想的呢?下面有四种解法,看看你的解法是不是其中之一. 解法一.穷举 解题思路-- 既然是求某一个连续的子序列的最大和,那么我们把所有的子序列的和都加一遍,然后用一个变量来存储最大的和值,当遍历一遍所有子序列,即可得到最大的和.由于这个子序列长度可以是1,也可以是N,因此需

算法笔记2-优先队列(堆)(上)

一.什么是优先队列? 看一情景:我们去KTV唱歌,点歌的时候,可以发现所点的歌就是一个队列. 这时候,一个MM突然不玩手机了想唱歌,于是她来点歌,并且想尽早轮到她. 于是她可以选择"插歌"这个功能插到前排队列里. 这种具备可以插入优先权元素的队列,就叫优先队列.但是,这个定义不是严谨的. 优先队列的基本模型是这样的-- 具备两个功能: insert插入: deleteMin 删除最小者. 它的工作就是-- 它很有用哦,具体可以用在操作系统,外部排序和贪婪算法中等. 二.怎么实现优先队列