前言
- 文章内容是本人之前学习数据结构时所做的零散笔记的汇总及补充,整理过程难免有瑕疵,如果小伙伴发现错误请及时不吝指出,在此谢过!
第一篇---->基本概念和认识
第二篇---->算法
第三篇---->算法概述补充
第四篇---->数据结构概述补充
第五篇---->Java线性表详细实现
第六篇---->Java栈详细实现
第七篇---->Java队列详细实现
算法
1 数据结构与算法关系
- 谈数据结构,很多时候都会讲到算法,以及它们之间的关系,有一些经典书籍的名字也叫做“数据结构与算法分析”。那么二者之间有啥关系呢?为啥老是组团出现呢?
- 假设说,有一天你打算去现场看德云社相声,到了现场一看,结果发现怎么只有一个人在讲相声,原来是另外一个搭档生病没有来,这就有点尴尬了,这还有什么看头呢?
- 事实上,数据结构和算法也是类似的关系。只谈数据结构,当然也可以,但是看完后没有什么感觉,但是如果再把对应的算法也讲一讲,你就会发现,原来计算机中的这些前辈是真的厉害,他们解决了很多看似很难解决或者没法解决的问题,变得非常美妙和神奇。
2 算法间的比较
- 这里假设小伙伴们已经有了一定的编程经验,现在如果让你写1+2+3+…+100的程序,你该怎么写呢?也许你会首先想到下面这个代码
- 这是最简单的程序之一了,它就是一种算法,但是问题在于,这样写是不是真的很好呢?是不是最高效呢?
- 高斯的童年故事相信大家都很熟悉了,不妨再感受下,天才当年是如何展现天分和才华的
据说18世纪生于德国小村庄的高斯,上学一天,课堂上老师出了一个题目,要求计算1+2+…+100的结果,谁先算出来谁先放学回家。高斯很快就算出了答案,是5050.高斯的思考方式是头尾相加都是101,共有50组,所以是101*50=5050. - 用程序来实现如下
- 这种算法不仅仅可用于从1加到100,就是到1千,1万。。。都是瞬间的事情。但是如果使用第一次的for循环,那将循环100,1000,1000.。。次
3 算法的基本概念
算法(Algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每条指令表示一个或多个操作。
- 简单来讲,算法就是描述解决问题的方法。一般来讲,对于给定的问题,是可以有多种算法来解决的。现实世界中问题千奇百怪,算法当然也就千变万化,没有通用的算法可以解决所有的问题。
4 算法的特性
- 算法有5个重要的特性:
有穷性,确定性,可行性,输入,输出
有穷性
:一个算法必须总在执行有穷步后结束
,且每一步都可在有穷时间内完成
。