什么是数据结构和算法?学算法还需要去了解数据结构吗?

我是这么理解的,数据结构就是数据在内存中的排列形式比如可以是连续的或者分散的或者是树型的等等方式排列的某一种结构。算法就是在数据结构的基础上编出来的一种函数,就是说先有物... 我是这么理解的,数据结构就是数据在内存中的排列形式 比如可以是连续的 或者 分散的 或者是树型的等等方式排列的某一种结构。

算法就是在数据结构的基础上编出来的一种函数,就是说先有物理层的支持,然后才有的算法,那是不是说算法对应着数据结构,比如我要比较数的大小,我就调用一个比较算法的函数,然后这个函数就会在内存里以这个函数对应的数据结构方式排列?

如果我想要排序数字了,那这时候我要调用另一个排序的函数算法,这个算法就会在内存里把数按另一种数据结构方式排列?

那我感觉数据结构是相对应硬件方面来说的,毕竟在内存里排列,多少有点接近硬件了,那一般说学数据结构和算法 有什么用?

我感觉学算法还有点用,毕竟会了算法 就知道怎么实现功能了,那数据结构学了是不是就是能了解数据在内存里的表现形式这样多多少少便于了解下?还有别的用处吗?

比如说 数组也算是一种数据结构 那我把数组的函数算法学会了 不去学数组的数据结构或者说不想知道数据结构什么的 是不是也行?
1先看看我对数据结构和算法的理解对不对?
2在告诉我 只学算法 不了解数据结构什么的 有影响吗?
展开
 我来答
百度网友75967b7
推荐于2017-11-25 · TA获得超过1229个赞
知道小有建树答主
回答量:467
采纳率:100%
帮助的人:538万
展开全部
  1. 你这理解不完全正确。

      因为数据结构不只是内存中数据的排列,它是对数据的一种组织方式,就像图书馆要排书一样,是为了便于操作,同时它本身也集成了对通用操作:比如查找、比较等的支持。数组不是一种数据结构,而是一种数据类型。一个完整的数据结构包括逻辑结构和存储结构。通常选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。

     因此在语言实现上,数据结构通常也会包含与之相对应的算法集合,这些算法是指基本算法:查找、索引、比较等。


      数据结构的逻辑结构和硬件是没有关系的,而其存储结构受到计算机硬件系统工作方式的影响,通常这点影响在于数据时顺序存储还是离散存储。算法的基础是数据结构。只有指定明确的数据结构,算法才能设计完成,脱离数据结构,算法是无法,也不可能成立的。因为不需要数据的算法就不是一个有效的计算机算法,算法中任何对数据的组织形式都可以被称之为数据结构。


2.数据结构在编程中的地位是极其重要的,是一个程序实现的基础中的基础,在此基础上才能构建算法。通常而言,你不了解什么高深的算法,一样能完成工作,但是如果你不了解基本的数据结构,那么可以说,你根本就不能完成一个任何有实质性内容的程序。Donald Ervin Knuth教授在其《计算机程序设计艺术》的第一卷《基本算法》中花费的绝大部分的篇幅去论述数据结构。由此可见数据结构对算法的重要性。

更多追问追答
追问
排序 比较大小 删除 查找 等等这些是不是算法?如果是 那我调用这些函数功能不就行了 我知道它们是干嘛用的 能实现程序的功能不就行了?知道算法 是不是就等于知道数据结构了?那用什么编程语言能控制数据结构?是自己编写代码开发新的数据结构和对应的算法吗?
追答
不一定,如果你知道某个算法的具体操作,你可以推测它的数据结构,但是不一定能完全确认。双向队列和栈在表现上就可能会存在完全一样的情形,但是不能只通过其操作比如push来确定到底是哪个数据结构。
不客气的说,大部分的数据结构都可以代替对方,但是他们之间的不同点在于其优化方式和编写不低不同,比如如果你要写一个二分查找的算法,用单向链式结构有够你恶心的……
数据结构不同,与之关联的操作所采用的算法也就有不同的特点。就比如你要吃丸子可以用勺子也可以用叉子,当然用筷子也行,但是其难易程度不同,尤其在这丸子比蛋还滑的时候。
至于你判断是不是算法的话,可以自己去看算法的定义,当然我也可以告诉你是的。你知道查找是用来找到某个元素的,但是如果你不知道怎么查找不是一样是渣渣啊,在应用上,如果有现成的数据结构可以使用,你只要知道查找的接口就行了,连怎么查找,在哪里查找你都不用管,因为这些事情别人已经替你做了。

另外要强调一点,算法不是函数,算法有着严格的定义。通常我们在编程中所说的数据结构其实是抽象数据类型(ADT)即数据结构的实现模型,而不是数据真正意义上的结构。
5onlylove57
2013-05-29 · TA获得超过131个赞
知道小有建树答主
回答量:94
采纳率:100%
帮助的人:97.1万
展开全部
  1. 数据结构与算法密不可分。

  2. 数据结构注重了数据的组织形式。 数据的一定的组织方式已决定了只适用于某此算法。

  3. 算法寻求在指定数据结构上的最优解, 也就是最有效率的方法。 为此也有此设计特定的数据结构的, 比如红黑树就是被发明出来的。

  4. 好的算法: 存储空间效率(数据结构)与时间效率(算法性能)达到一定的平衡, 而非只突出时间效率。 所以一定要同时考虑这两个方面才能设计出一个好的算法。

  5. 应用中还要考虑特定的环境, 比如嵌入式, 没有大的内存, 这时有些占用大量的内存的一些算法就不适用了。 


另一种角度: 借用C++中STL的概念,

数据结构: 在C++中定义为容器, 比如:vector(数组) list(链表)。。。而这些容器对于装入其中的东西并无限制, 比如使用者可定义装int, 也可以装char, 还可以装string数据。


算法: 在C++中定义也叫算法, 比如find, 查找指定的一个元素, 你可在vector容器中查找 , 也可用在list容器查找。 但是在不同的容器中查找效率是不同的, 这是容器本身决定的。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友28b4182
2013-05-29 · TA获得超过7222个赞
知道大有可为答主
回答量:4847
采纳率:100%
帮助的人:1836万
展开全部
数据结构可以优化数据的存诸,使得数据存诸能够更省空间,查找更高效。

有时候数据结构本身就是一种算法,比如线段树,SPLAY树,堆。
而有一些算法是要建立在数据结构的基础之上才能够更高效的。
对于不同的算法需要采用合适的数据结构。比如最短路径算法,对于希疏图,我们要用连接表来存连。这样才不能导至大量的空连。而且连的查找也更高效。
而对于密图,我们采用连接矩阵来存诸。
更多追问追答
追问
那请问我选择算法 是不是算法对应着数据结构?我控制了算法就等于控制数据结构?数据结构毕竟在内存里排列 我们不可能用手去摸对吧 那只能通过代码来控制 那代码就是函数算法 所以我认为算法就是控制数据结构的,那我学会算法 不就行了 至于数据结构在内存里怎么排列 我不了解不会有什么太大影响吧?比如我要存好多人信息 我知道有个数组的算法不就行了 至于数组让数据在内存里什么结构 我可以不了解啊
追答
是的,这个是内存怎么存我们不管,但是我们这儿说数据结构的数据存诸方式不是说内存中是怎么样的方式。而且我们怎么把数据联系起来。因为计算机是傻的,他只知道存数据,你给什么他就存什么,他也不管顺序,还是什么的。我们的数据结构是把他们按照一定的逻辑规则来存诸。你说的内存是属于物理存诸,这个我也不懂,尽管我懂很多的数据结构。

数据结构不是计算机自己实现的,是人为设计的,就像上面的线段树,SPLAY树之类的,如果没有人为的设计,计算机中是不会自动产生这些东西的。你慢慢学一些算法之后就会对数据结构这一概念有更深刻的理解了。你现在对数据结构的理解还是有一些偏差。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
suicheyiyu
2013-05-29
知道答主
回答量:6
采纳率:0%
帮助的人:3.2万
展开全部
呵呵,这两个都是要学的。。。不学你怎么做好编程
追问
你说详细点 我做过数组 斐波那契 水仙花 比较大小什么的题 这不就是练算法吗 也没见弄数据结构啊 有何不可?我把算法弄熟了不是一样吗 有什么不同吗 给我举个例子说下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zpxdlove2001
2013-05-29 · TA获得超过1627个赞
知道小有建树答主
回答量:711
采纳率:100%
帮助的人:487万
展开全部
你可以这样理解,数据结构你把它理解成excel里面的制作一张表格的表模,比如你做一张工资表,那么表模肯定你要考虑每一个数据的意义和它们应该放置于哪个位置。而算法就是你在表格内部数据间的关联运算,可以是逻辑的也可以是数学的。
因此你制作一张工资表,你肯定要先定结构,然后再定算法。当然你说只学算法不学结构照样能做出结构来,但你考虑更高一个层次,如果你这张工资表只是一个公司几百份表格中的一份,你如果不把它的结构搞得很清楚的表达,你其他表格要调用这张表格的数据就无从做到,而你如果用结构来表示,就很清晰了,这就是结构和算法的不同。
结构是较为宏观的思考方式,算法是微观的实现,它们之间密不可分。当然在现在软件开发工程里面,系统工程师可以分为做结构和做算法的,但一般做结构的都是更核心的成员,他们懂算法,但不用做算法,他们只要把数据结构模型构造好,工程分拆清晰,让其他的程序员按照他们规划的结构去做细致的工作就可以了。
更多追问追答
追问
我知道了 好像是如果会了数据结构 就可以自己创造一个新的快捷算法?如果不会结构 只能用别人写好的算法拿来用是吧?就像你说的 核心成员专门做出一些高效的算法函数出来,然后让员工们直接调用,如果没核心成员做算法 ,那大家只能用外国人做好的那些算法用 是这样吗?那也就是说同一种数据结构 可以有不同的算法 看谁的算法更好了?是不是说数据结构是固定的 根据硬件的支持才行?算法可以创新?
追答
“好像是如果会了数据结构 就可以自己创造一个新的快捷算法?”通过数据结构的优化,可以创造新算法,比如你原来的数据结构里面1,2,3三个数字存放在同一个单元格内,然后我们的目标是选取1来乘以10得到一个新数字,旧的数据结构内,我们的算法第一步需要判断单元格内1的存在,第二步是筛选出1来,第三步是1乘以10。但如果我们来优化一下我们的数据结构,把1,2,3分拆在三个不同的单元格内,那么我们和10相乘,只要一步就可以完成,不用去从单元格三个数字去筛选判断出1来。
“那也就是说同一种数据结构 可以有不同的算法 看谁的算法更好了?是不是说数据结构是固定的 根据硬件的支持才行?算法可以创新?”这里面要更正一下,应该是说一个程序实现目标,可以有不同的数据结构和不同的算法,看谁的数据结构和算法更好。程序实现的目标是固定的,但数据结构和算法都是可以创新的。
比如我们现在进行一个目标命题:“大家用同样的积木建一个你心目中的建筑”,然后分给几个人同样多的积木,那么命题是固定的,但实现结果切会有很大的区别,大家会按照自己的理解进行搭建。
数据结构比算法重要是因为它是搭起来一个架子,比如建筑的时候的钢筋结构,你把架子框架搭好了,别人才能在此基础上进行后续工作。算法是具体的执行命令。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式