大话数据结构(一)——绪论

数据结构起源:

程序设计=数据结构+算法。

基本概念:

1、数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别的,并输入给计算机处理的符号。数据不仅仅包含整型、实型等数值型,还包括字符和声音、图像、视频等非数值类型。

2、数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。比如,在人类中,人就是数据元素。

3、数据项:一个数据元素可以由若干个数据项组成,比如人这个数据元素,可以由眼睛、耳朵、鼻子、等这些数据项组成。

数据项是数据不可分割的最小单位。但真正讨论问题时,数据元素才是数据结构中建立数据模型的着眼点,比如讨论一部电影,是讨论这部电影角色即“数据元素”,而不是讨论这个角色的年龄或姓名这样的“数据项”去研究分析。

4、数据对象:是性质相同的数据元素的集合,是数据的子集。

性质相同:是指数据元素具有相同数量和类型的数据项,比如人都有姓名、生日、性别等相同数据项。

既然数据对象是数据的子集,在实际应用中,处理的数据元素通常具有相同的性质,在不产生混淆的情况下,我们都将数据对象简称为数据。

5、数据结构

不同数据元素之间不是独立的,而是存在特定的关系,我们将这些关系成为结构。

数据结构:是相互之间存在的一种或多种特定关系的数据元素的集合。

    数据项-》数据元素-》数据(数据对象)

逻辑结构与物理结构

1、逻辑结构

逻辑结构:是指数据对象中数据元素之间的相互关系。

(1)集合结构:集合结构中数据元素除了同属于一个集合外,它们之间没有其他关系。即各个数据元素是“平等”的,它们的共同属性是“同属于一个集合”。类似与数学中的集合。

(2)线性结构:线性结构中的数据元素之间是一对一的关系。①->②->③->④->⑤->⑥

(3)树形结构:树形结构中的数据元素之间存在一种一对多的层次关系。

(4)图像结构:图形结构的数据元素是多对多的关系。

2、物理结构

物理结构:是指数据的逻辑结构在计算机中的存储形式。

数据是数据元素的集合,根据物理结构的定义,实际上就是如何把数据元素存储到计算机的存储器中。存储器主要针对内存而言的,像硬盘、光盘等。

数据的存储结构应正确反映数据元素之间的逻辑关系,这才是最为关键的。

数据元素的存储结构形式有两种:顺序存储和链式存储。

(1)顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一样的。这种结构很简单,就是排队占位。

(2)链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。数据元素的存储关系并不能反映其逻辑关系,因此需要用一个指针存放数据元素的地址,这样通过地址就可以找到相关数据元素的位置。

逻辑结构是面向问题的,而物理结构是面向计算机的,其基本的目标是将数据及其逻辑关系存储到计算机的内存中。

抽象数据类型

数据类型:是只一组性质相同的值的集合及定义在此集合上的一些操作的总称。

数据类型是按照值的不同进行划分的。在高级语言中,每个变量、常量和表达式都有各自的取值范围。类型就用来说明变量或表达式的取值范围和所能进行的操作。

在C语言中,按照取值的不同,数据类型可以分为两类:

原子类型:是不可以在分解的基本类型,包括整型、实型、字符型等。

结构类型:是若干类型组合而成的,是可以再分解的。如,整型数组是由若干个整型数据组成。

抽象数据类型(abstract data type——ADT):是指一个数学模型以及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑特性,而与其计算机内部如何表示和实现无关。“抽象”的意义在于数据类型的数学抽象特性。如“超级玛丽”游戏,定义几个基本操作,走(前进、后退、上、下)、跳、打子弹等。一个抽象数据类型定义了:一个数据对象、数据对象中各个数据元素之间的关系及对数据元素的操作。

抽象数据类型体现了程序设计中问题分解、抽象和信息隐藏的特性。

抽象数据类型的标准格式:

ADT 抽象数据类型名

Data

数据元素之间逻辑关系的定义

Operation

操作1

初始条件

操作结果描述

操作2

....

操作n

......

endADT

时间: 2024-10-09 10:02:53

大话数据结构(一)——绪论的相关文章

《大话数据结构》 第一讲.数据结构绪论 (读书笔记)

大话数据结构 导读笔记 第一讲: 一.基本概念和术语 (1)数据元素:是组成数据的.有一定意义的基本单位,在计算机中通常作为整体处理.也被称为记录.   比如,在人类中,什么是数据元素呀?当然是人了. (2)数据项:一个数据元素可以由若干个数据项组成.   比如人这样的数据元素,可以有眼.耳.鼻.嘴.手.脚这些数据项,也可以有姓名.年龄.性别.出生地址.联系电话等数据项,具体有哪些数据项,要视你做的系统来决定. 数据项是数据不可分割的最小单位.在数据结构这门课程中,我们把数据项定义为最小单位,是

《大话数据结构》学习笔记 排序

排序的严格定义:  假设含有n个记录的序列为{r1,r2,......,rn},对应的关键字分别为{k1,k2......,kn},需确定1,2,......,n的一种排列p1,p2,......,pn,使其相应的关键字 满足Kp1<=Kp2<=......Kpn关系,即使得序列成为一个按关键字有序的序列(rpq,rp2,......rpn),此操作称为排序.  排序的稳定性:内排序与外排序(根据记录是否全部放置在内存中). 根据排序中的主要操作,可以分为插入排序类(直接插入排序->希尔

图的基础算法(大话数据结构笔记)

概述 线性表的每个元素有线性关系,每个数据元素只有一个直接前去和一个直接后继.树的数据元素之间有着明细那的层次关系,并且每层上的数据元素可能和下一层中多个元素相关,但只能和上一层中一个元素相关.这和一对父母可以有很多孩子,但每个孩子却只能有一对父母是一个道理.可现实中,人与人之间关系复杂,不是简单一对一,一对多的关系.这种复杂关系更适合用图来表示.在图结构中,节点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关.如下图所示:无向边:Edge (vi,vj)有向边:也叫弧,Arc. <v

【广告】《大话数据结构》在多看书城6月6日中午12点至晚上24点特价销售:0.99元

因多看书城成立两周年举办大促销活动,所以我的图书< 大话数据结构 > 电子版于6月6日中午12点至晚上24点特价销售:0.99元(听说新注册用户送3元,这样就等于一分不花了). 购买地址:http://www.duokan.com/book/44279 希望有兴趣了解和学习数据结构的读者前去购买. 坦白说,对于过去购买<大话数据结构>纸质书的读者,特别是前三次印刷的读者,我是一直心存歉意的.因为我的写作能力有限,加上编辑的疏忽,造成纸质版印刷有不少的错误,尽管大多数读者都给予了好评

【数据结构】绪论部分

今天由我来跟大家讲一下数据结构的绪论部分吧.数据结构整体复习主要靠理解.理解了学习起来其实是很轻松的事情,学进去了你也会发现很好玩.这篇只是个结构概括,理解就行. 1.1 基本概念 1.数据:即信息. 2.数据元素:数据的基本单位.如:一个学生记录就是一个数据元素,由学号.姓名等数据项构成(数据项为构成数据元素的不可分割的最小单位). 3.数据对象:相同性质的数据元素集合.数据的子集. 4.数据类型:一个值的集合和在此集合上一组操作的总称. 5.抽象数据类型:ADT.一个模型和在此模型上的一组操

大话数据结构读书笔记

大话数据结构读书笔记 编程基础: 数据结构 算法 1 线性表 //顺序储存结构的结构代码: #define MAXSIZE 20//储存空间的起始分配量 typedef int ElemType;//ElemType类型根据实际类型而定,这里假设是int typedef struct{ ElemType data[MAXSIZE];//数组储存元素,最大值为MAXSIZE int length;/线性表当前长度: }SqList; //顺序存储结构需要三个属性: //1存储空间的起始位置:数组d

大话数据结构之php实现单链表

最近想起来两件事1.大话数据结构和大话设计模式 这两本书很有意思,C语言有指针,所以实现起来容易理解,所以突然想到用PHP写一下来熟悉一下数据结构的线性表,不过看的比较慢.一般两三天才看完一部分,毕竟还要工作,老板还安装摄像头看着每天干了啥.....老板事业兴隆,嘻嘻. 线性表的概念不赘述,直接去看大话数据结构,代码也是在参考众多实现方案,比较符合大话数据结构的原本思想,就是基本上还原C语言的实现过程. 直接上代码 线性表 <?php /*  *文件名:linearList.php   * 功能

链栈--(大话数据结构97页)

//链栈的实现 --大话数据结构99页 #include <iostream> using namespace std; //链节点定义 typedef struct stacknode { int data; struct stacknode * next; }StackNode, *LinkStackptr; //定义链栈,头指针 和 长度 struct LinkStack{ LinkStackptr top; int count; }; //初始化void InitStack(LinkS

大话数据结构——使用栈实现简单的四则运算

最近在读<大话数据结构>,里面有个例子是使用栈实现四则运算,现在我用java把这个功能实现试试 代码如下: package com.datastruct; import java.util.ArrayList; import java.util.Stack; import java.util.regex.Matcher; import java.util.regex.Pattern; public class StackPractice { private static ArrayList&l

KMP算法学习记录----《大话数据结构》部分匹配表学习部分

如需转载,请保留本文链接. 首先先将<大话数据结构>关于KMP算法的讲解部分贴上,本文不提供下载链接,也不会将电子书作为资料留百度云,需要电子书的各位,请自行寻找电子版. 关于上述的KMP算法种的next数组的推导部分,一直不是很明白,本贴是关于上述部分的学习推导记录. 以书中字符串为例: 1|2|3|4|5|6|7|8|9| a|b|a|b|a|a|a|b|a| 0|1|1|2|3|4|2|2|3| string T = "ababaaaba"; int i = 1;j