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

2024-12-24 16:33:55
推荐回答(5个)
回答1:

  1. 你这理解不完全正确。

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

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


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


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

回答2:

  1. 数据结构与算法密不可分。

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

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

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

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


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

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


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

回答3:

数据结构可以优化数据的存诸,使得数据存诸能够更省空间,查找更高效。

有时候数据结构本身就是一种算法,比如线段树,SPLAY树,堆。
而有一些算法是要建立在数据结构的基础之上才能够更高效的。
对于不同的算法需要采用合适的数据结构。比如最短路径算法,对于希疏图,我们要用连接表来存连。这样才不能导至大量的空连。而且连的查找也更高效。
而对于密图,我们采用连接矩阵来存诸。

回答4:

呵呵,这两个都是要学的。。。不学你怎么做好编程

回答5:

你可以这样理解,数据结构你把它理解成excel里面的制作一张表格的表模,比如你做一张工资表,那么表模肯定你要考虑每一个数据的意义和它们应该放置于哪个位置。而算法就是你在表格内部数据间的关联运算,可以是逻辑的也可以是数学的。
因此你制作一张工资表,你肯定要先定结构,然后再定算法。当然你说只学算法不学结构照样能做出结构来,但你考虑更高一个层次,如果你这张工资表只是一个公司几百份表格中的一份,你如果不把它的结构搞得很清楚的表达,你其他表格要调用这张表格的数据就无从做到,而你如果用结构来表示,就很清晰了,这就是结构和算法的不同。
结构是较为宏观的思考方式,算法是微观的实现,它们之间密不可分。当然在现在软件开发工程里面,系统工程师可以分为做结构和做算法的,但一般做结构的都是更核心的成员,他们懂算法,但不用做算法,他们只要把数据结构模型构造好,工程分拆清晰,让其他的程序员按照他们规划的结构去做细致的工作就可以了。