20182330《程序设计与设计结构》 第八周学习总结
教材学习内容总结
周一:
-
链表实现栈
data存放数据点
next下一节点
存储地址 数据域
单链表:只含一个指针域的链表 a-》
双向链表:<-a->
地址不一定连续 -
尾插法
Student temp = Head;
while(temp.next!=null){
temp=temp.next}
temp.next=node;
return head;
用一个临时指针(不能影响头指针,头指针移动则垃圾回收)等于头指针temp=temp。next 若为null,找到了链表结尾,则指向新插入的对象 -
头插法:新对象指向首个元素,head指针赋给新对象,则新链表完成
node.next=Head;
Head =node;
return Head;
删除: -
temp.next=temp.next.next
-
两个指针,p.next=q.next
循环链表
双向链表
栈与链表
top即为head
周五:队列
- 队列:只能在队头删除,队尾插入。先进先出(队列等连续存储结构可以随机存取,链表不可以,必须从第一个开始找)
- 方法:enqueue入队
dequeue出队
first=peek看第一个元素
isEmpty是否为空
size多少元素 - 定义结点
LinerNode
LinerNodefront //队头指针
LinerNoderear // 队尾指针
int count//元素个数
演示https://visualgo.net/en/list - 线性表
具有相同特性数据元素的有限序列
栈队列是特殊的线性表 - 出队入队操作:
为空时rear front都在1(不是指针),为空判定条件:(rearfront)也有可能队满!
(1) 少用一个空间,判断(rear+1)%M=front
(2) size
(3)看上一步操作,确定是front导致的还是rear导致的)
入队rear+1,q[rear++]=x;
出队front+1,e=q[front++];
假溢出:0 1 2 3 4 5 浪费空间
(出队元素)
解决:
(1)依次固定
(2) mod size,循环队列:把队列设想成环形,让队列设想成环形,让sq【0】接在sq【M-1】之后,即:若rear+1M, 则另rear=0,移动指针不能用i=i+1,而是i=(i+1)%MAX
入队 sq【rear】=e;
rear=(rear+1)%M
出队e=sq
教材学习中的问题和解决过程
- 问题1:老师在课堂上演示的代码经常有泛型,那么究竟什么是泛型??如何使用?
- 问题1解决方案:书本和网上解决。
- 首先我们要知道:使用变量之前要定义,定义一个变量时必须要指明它的数据类型,什么样的数据类型赋给什么样的值。
- 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?
- 顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,
操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
用一个例子来说明:
List arrayList = new ArrayList();
arrayList.add("aaaa");
arrayList.add(100);
for(int i = 0; i< arrayList.size();i++){
String item = (String)arrayList.get(i);
Log.d("泛型测试","item = " + item);
}
毫无疑问,程序的运行结果会以崩溃结束:
ArrayList可以存放任意类型,例子中添加了一个String类型,添加了一个Integer类型,再使用时都以String的方式使用,因此程序崩溃了。为了解决类似这样的问题(在编译阶段就可以解决),泛型应运而生。
我们将第一行声明初始化list的代码更改一下,编译器会在编译阶段就能够帮我们发现类似这样的问题。
List<String> arrayList = new ArrayList<String>();
...
//arrayList.add(100); 在编译阶段,编译器就会报错
- 问题2:“串行化”是什么意思
- 问题2解决方案:串行化(Serialization)是计算机科学中的一个概念,它是指将对象存储到介质(如文件、内存缓冲区等)中或是以二进制方式通过网络传输。之后可以通过反串行化从这些连续的字节(byte)数据重新构建一个与原始对象状态相同的对象,因此在特定情况下也可以说是得到一个副本,但并不是所有情况都这样。
- 暂时就只能看懂这么多。
- 问题3:学习队列时偶然看到了“消息队列”的字眼,那什么是消息队列?
- 问题3解决方案:“消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。
消息被发送到队列中。“消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。
通俗的解释就是程序产生内容->入队(生产者) ->出队(消费者)
代码调试中的问题和解决过程
-
问题1:头插法出错
-
问题1解决方案:头插法在返回时一定要返回新的链表头,这样才能实现头插,否则就像我一样一直陷入死循环,检查代码无误,单步调试也无误,费了九牛二虎之力才找到问题的所在。
代码托管
前几周忘了截图,这是截止第十周之前的代码,以后会记得按时截图,以下统计代码量按照总增量/3计算。
上周考试错题总结
上周无考试
结对及互评
点评过的同学博客和代码
-
本周结对学习情况
- 20182314
- 点评:知识点总结的较为详细,但是代码的问题理解不深。
基于评分标准,我给本博客打分:14分。得分情况如下:
感想,体会不假大空的加1分
排版精美的加一分
结对学习情况真实可信的加1分
正确使用Markdown语法
模板中的要素齐全(加1分)
错题学习深入的加1分
点评认真,能指出博客和代码中的问题的加1分
教材学习中的问题和解决过程, 加5分
代码调试中的问题和解决过程,加2分
-
上周博客互评情况
其他(感悟、思考等,可选)
学习内容加紧,在时间上很紧张,每天要熬夜才能完成各种学科的任务。希望能够调节好自己的时间,以最好的状态学习。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 10000行 | 30篇 | 400小时 | |
第一周 | 42/42 | 2/2 | 20/20 | |
第三周 | 394/471 | 2/4 | 25/45 | |
第四周 | 394/471 | 2/4 | 25/45 | |
第五周 | 1668/2139 | 2/6 | 35/80 | |
第六周 | 2388/4527 | 1/7 | 30/110 | |
第七周 | 1660 /6187 | 2/9 | 25/135 | |
第八周 | 1660/7847 | 2/11 | 20/130 |
-
计划学习时间:25小时
-
实际学习时间:20小时
-
改进情况:希望提高效率