数据结构实在给我难住了,把队列栈啥的都用代码实现一遍实在没有啥意义啊.
其他描述也真心太无力了.都想直接跨过上QT算了,然后找到本书大概看了下还算可以,就按照书来把.
抽象数据类型(ADT)
他是一个数学模型,例如整型(int)的ADT就是加减乘除取模,无论在何种机器下,他的数学特性相同.
而抽象意义就在于将数据类型抽象为数学特性,使用户不必关心内在实现方法.
例如堆栈等的增删查改,就可以使用ATD抽象出去,无论什么形式实现,提供的接口可以是一样的.
算法定义的描述
算法可以使用自然语言描述,也就是伪代码.
也可以使用流程图,N-S图等描述工具.特点简介明了.
当然还有直接用计算机语言来描述,不过这种即使有注释也是神难看懂.
算法
正确性和可读性.
正确性不必多说,可读性需要便于人们阅读,交流调试.同样晦涩难懂的算法也易于隐藏错误.难以调试.
注释这点很重要,没有注释的代码就是天书.
还有变量名,需要见名知意.
不同目的的语句之间插入一个空白行.
排除非法输入,例如排序时数据为空,元素个数为1时.
最后才是算法的时空复杂度,算法使用次数少,追求程序的可读性.算法使用次数多,追求时间效率.数据量大,内存小应追求空间效率.
算法性能分析
用时间复杂度和空间复杂度评鉴算法优劣
运行时间主要因素
一,硬件的速度.
二,程序语言,一般语言级别越高,效率反而越低.
三,编译程序生成的目标代码质量,代码优化越好,程序生成质量越高.
四,问题的规模.
算法时间复杂度是指算法运行到结束的时间,这个时间就是算法中每条语句执行时间之和.每条语句的执行时间是该语句执行次数与所需要时间的乘积.但是当算法转化为程序之后,语句会根据机器性能,生成代码质量有关.所以无法确定.
常见时间复杂度
按照升序:常数阶O(1) < 对数阶O(log2n) < 线性阶O(n) < 平方阶O(n^2) < 指数阶O(2^n)