目录
目录
什么叫做算法:是对特定问题求解方法,或者说是步骤的一种描述。
什么叫做好算法(具有以下标准):
冰与火之歌:【时间】与【空间】复杂度
时间复杂度:在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。
算法的时间复杂度,也就是算法的时间量度,记作:T(n)= O(f(n))。它表示随问题规模的增大,算法执行时间的增长率和f(n)的增长率相同,称为算法的渐进复杂度,简称为时间复杂度。
其中f(n)是问题规模n的某个函数。这样用大写 O() 来体现算法时间复杂度的记法,我们称为大O记法
常见的时间复杂度如下图所示:
每个复杂度的时间比如下图所示:
栈的操作:
图中,HeadIndex=2;Num=5;
问题1:在用数组实现队列时,为什么环形数组较其他数组较好?
环形数组的优点:
可以==有效的利用资源==。用数组实现队列时,如果不移动,随着数据的不断读写,会出现假满队列的情况。即尾数组已满但头数组还是空的;循环队列也是一种数组,只是它在逻辑上把数组的头和尾相连,形成循环队列,当数组尾满的时候,要判断数组头是否为空,不为空继续存放数据。
但是呢,环形数组还是有缺点的:
循环队列中,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。因此,无法通过条件front==rear来判别队列是"空"是"满"。拓展知识:
为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环(环形)队列。
问题2:链表和数组的优缺点
相同点:
两种结构均可实现数据的顺序存储,构造出来的模型呈线性结构。
解决过程:
关键代码
public void SelectionSortList(){
int min;
SelectionSortNode a = null;
SelectionSortNode b = null;
for (a=list.next;a!=null;a=a.next){
for (b=a.next;b!=null;b=b.next){
if (a.num>b.num){
min = b.num;
b.num = a.num;
a.num = min;
}
}
}
}
经检查后发现,a=list.next导致跳过了节点的头,所以第一个节点被跳过了,因此它并没有参与排序;
修改后的代码:
public void SelectionSortList(){
int min;
SelectionSortNode a = null;
SelectionSortNode b = null;
for (a=list;a!=null;a=a.next){
for (b=a.next;b!=null;b=b.next){
if (a.num>b.num){
min = b.num;
b.num = a.num;
a.num = min;
}
}
}
}
输入a=list,重新运行。
教材学习中的问题和解决过程(2分)
代码调试中的问题和解决过程(2分)
本周有效代码超过300分行的(加0分)
算法分析,栈,队列
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 10000行 | 30篇 | 400小时 | |
第一周 | 77/77 | 2/2 | 15/15 | |
第三周 | 424/501 | 3/5 | 30/30 | |
第四周 | 393/894 | 2/7 | 30/30 | |
第五周 | 320/1214 | 1/8 | 30/30 | |
第六周 | 904/2118 | 2/10 | 30/30 | |
第7周 | 1350/3468 | 3/13 | 30/30 |
计划学习时间:25小时
实际学习时间:20小时
改进情况:
20182323 2019-2020-1 《数据结构与面向对象程序设计》第7周学习总结
原文:https://www.cnblogs.com/caoqian1314/p/11787996.html