【数据结构】什么是数据结构?

绪论

第一个很有意义,又没什么意义的问题:什么是数据结构??

其实,数据结构在计算机科学界至今没有标准的定义。个人根据各自的理解的不同而有不同的表述方法: 
  • Sartaj Sahni在他的《数据结构、算法与应用》一书中称:
       “数据结构是数据对象,以及存在于该对象的实例合组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。”
          他将数据对象(data object)定义为“一个数据对象是实例或值的集合”。 
  • Clifford A.Shaffer在《数据结构与算法分析》一书中的定义是:“数据结构是 ADT(抽象数据类型Abstract Data Type) 的物理实现。”

其实,究竟什么是数据结构这个问题真的并不是很重点。您将会在进一步学习它之后,有自己对它的一种理解。

我们更应该关心的是,学习数据结构能为我们解决什么样问题?它给我们带来什么样的好处?

第一个问题,在程序里面,有一个家族,如果您知道一个人的名字,想知道他老爸是谁那么应该怎么做?

其中一个答案是,创建一个结构体,里面包含了本人的名字和他老爸的名字,这样,当我找到这个人的名字的时候,相应的就可以知道他老爸是谁了,可是这样好像很浪费空间啊,每有一个老爸就要多一份存储名字的空间,一个家族里面有很多的老爸啊,

那么我们可以换另外一种方法,我们不直接用老爸的名字,而是使用一个指向老爸包含名字的结构的指针,同样我们能够找到他老爸的名字,

如果您这样做了,那么您已经在使用数据结构了!

程序设计实际 = 好的结构 + 好的算法!

同样的问题,不同的设计方法,即使都能达到最后正确的结果,但是效果却很大的差别,有的可能只要一秒,有的可能需要几十秒,有的可能不需要太大的空间,有的可能很耗空间!

数据结构就是一门为您提供好的结构和好的算法的学科!

简单的讲,学习数据结构,您就可以编写更好的程序

数据结构相关的一些概念和术语:

  • 数据          :这个很好理解吧,所有计算机能处理的‘符号’都是数据。例如,整数、浮点数、图像、声音等;
  • 数据元素   :数据的基本单位,计算机对其作为整体看待的对象。例如,一本书(包括,书名、作者名等)
  • 数据项       :数据元素的最小单位,根据数据元素而定,对于书,书名是数据项。而对于名字这个数据元素,笔画是数据项;
  • 数据对象    :性质相同的数据元素的集合,是数据的一个子集。例如,整数数据对象是集合N= {...-2,-1,0,1,2...}
  • (数据)结构 :数据元素之间存在的关系;
  • 数据类型    :一个值的集合和定义在这个值集上的一组操作的总称;
  • 抽象数据类型:一个数学模型以及定义在该模型上的一组操作;

算法的设计要求:

  • 正确性:无可或非的应该把这个放在第一位!
  • 可读性:如果您的代码没有注释,没有缩进,还胡乱命名变量,如果我是老板,见一个开除一个;
  • 健壮性:指定是对错误输入的一个处理容忍的方法,而不至于导致程序异常;
  • 效率:一般可以理解为算法执行的时间(时间复杂度);
  • 存储量:指算法执行过程中所需要的最大存储空间(空间复杂度);

推荐:《编程修养》,作为一个好的程序员,当然必须得有好的编程习惯!(PS:在我上传的资源里面有)

效率和存储量在一般情况下不好兼得,至于优先考虑哪个,要看具体的应用了。

要学会简单衡量(具体的在后面讨论):

  • 时间复杂度:简单的理解是,基本操作次数对应于问题规模n的函数,通常有O(1)、O(n)、O(n^2)....;
  • 空间复杂度:对于输入数据操作所需要的额外空间;

最后,我想说一句,数据结构真的不好学,就严蔚敏老师那本300页的数据结构(C语言版),都足足够看一两个月了。

但是,如果您想作为一名合格的程序员,相信我,学好的它吧,不管有多难!

(在C++的STL中,很多数据结构已经实现了,例如:表list、堆stack、队列queue)

【数据结构】什么是数据结构?,布布扣,bubuko.com

时间: 2024-08-09 22:01:50

【数据结构】什么是数据结构?的相关文章

你真的懂了redis的数据结构吗?redis内部数据结构和外部数据结构揭秘

Redis有哪些数据结构? 字符串String.字典Hash.列表List.集合Set.有序集合SortedSet. 很多人面试时都遇到过这种场景吧? 其实除了上面的几种常见数据结构,还需要加上数据结构HyperLogLog.Geo. 可是很多人不知道redis 不仅有上面的几种数据结构,还内藏了内部的数据结构.即redis可以分为外部数据结构和内部数据结构. 1. 如何查看redis的数据结构? ####1.1 如何查看redis的外部数据结构?可以使用type命令,返回key的类型,如str

算法数据结构02 /常用数据结构

目录 2算法数据结构02 /常用数据结构 1. 栈 2. 队列 3. 双端队列 4. 内存相关 5. 顺序表 6. 链表 7. 二叉树 2算法数据结构02 /常用数据结构 1. 栈 特性:先进后出的数据结构,有栈顶和栈尾 应用场景:每个 web 浏览器都有一个返回按钮.浏览网页时,这些网页被放置在一个栈中(实际是网页的网址).现在查看的网页在顶部,第一个查看的网页在底部.如果按'返回'按钮,将按相反的顺序浏览刚才的页面. 栈的方法: Stack():创建一个空的新栈. 它不需要参数,并返回一个空

算法数据结构01 /算法数据结构概述

目录 算法数据结构01 /算法数据结构概述 1. 算法 2. 评判程序优劣的方法 3. 时间复杂度 4. 数据结构 5. python数据结构性能分析 6. 总结 算法数据结构01 /算法数据结构概述 1. 算法 算法概述 算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务.一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再调用. 算法是独立存在的一种解决问题的方法和思想. 对于算法而言,实

数据结构1:数据结构和算法分析

问题引出 假设有一道题目:有一组N个数而要确定其中第k个最大者,我们称之为选择问题,那么这个程序如何编写?最直观地,至少有两种思路: 1.将N个数读入一个数组中,再通过某种简单的算法,比如冒泡排序法,以递减顺序将数组排序,则第k个位置上的元素就是我们需要的元素 2.稍微好一些的做法,将k个元素读入数组并以递减顺序排序,接着将接下来的元素再逐个读入,当新元素被读到时,如果它小于数组中的第k个元素则忽略之,否则将其放到数组中正确的位置上,同时将数组中的一个元素挤出数组,当算法终止时,位于第k个位置上

ES6 之 Set数据结构和Map数据结构 Iterator和for...of循环

ECMAScript 6 入门 Set数据结构 基本用法 ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set本身是一个构造函数,用来生成Set数据结构. var s = new Set(); [2, 3, 5, 4, 5, 2, 2].map(x => s.add(x)); for (let i of s) { console.log(i); } // 2 3 5 4 上面代码通过add方法向Set结构加入成员,结果表明Set结构不会添加重复的值. 向S

逻辑数据结构和存储数据结构

谈论数据结构的目的是为了在计算机中实现对数据的操作.因此还需要研究如何在计算机中表示数据.数据的逻辑结构在计算机存储设备中的映像被称为数据的存储结构.也可以说数据的存储结构是逻辑结构在计算机存储器的实现,又称物理结构.数据的存储结构是十分依赖计算机的.常见存储结构有顺序存储结构.链式存储结构等. 总结: 逻辑数据结构:数据与数据之间的逻辑关系. 存储数据结构:通过程序语言(C语言:结构体.数组.指针)对逻辑数据结构的实现.

(4)java数据结构--集合类及其数据结构归纳

Java集合类及其数据结构归纳 - s小小的我 - 博客园http://www.cnblogs.com/shidejia/p/6433788.html 上面这张图总结了java集合类的继承结构,下面是对集合类的一些总结和特性描述: Collection Collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作:添加.删除.清空.遍历.是否为空.获取大小.是否保护某元素等等.Collection接口的所有子类(直接子类和间接子类)都必须实现2种构造函数:不带参数的构造函数和参数

图的邻接矩阵存储数据结构--自己写数据结构

头文件graph.h #ifndef _GRAPH_H_ #define _GRAPH_H_ #define MAX_VER 100 #define ENDLESS 65535 typedef char VertexType; typedef int EdgeType; typedef struct _Graph { VertexType ver[MAX_VER]; EdgeType edge[MAX_VER][MAX_VER]; int num_ver,num_edge; }Graph,*pG

数据结构第一讲,数据结构入门了解知识.

目录 数据结构入门简介 一丶数据结构的四种分类 1.集合结构 2.线性结构 3.树结构 4.图结构 二丶物理结构简介 1.存储器 2.数据元素的存储形式 三丶总结 数据结构入门简介 一丶数据结构的四种分类 我们常听的一句话就是, 数据结构 + 算法 = 程序 意思就是在我们的程序设计中,数据结构是必不可少的,那么什么是数据结构,数据结构简而言之就是针对数据关系而生产的产物.可能不是很理解.因为我们程序编写过程中,程序中产生的数据怎么存储这都是数据关系. 常见的数据结构种类. 集合 线性结构 树结

数据结构:八大数据结构分类

目录 数据结构分类 1.数组 2.栈 3.队列 4.链表 5.树 6.散列表 7.堆 8.图 @ 数据结构分类 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 . 常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示: 1.数组 数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始.例如下面这段代码就是将数组的第一个元素赋值为 1. int[] data = new in