第五周作业总结(内含用Junit测试ArrayStack和LinkedStack课堂练习报告)
---恢复内容开始---
# 学号 20162310《程序设计与数据结构》第五周学习总结
教材学习内容总结
- 集合分为线性集合(集合中的元素排成一行)和非线性集合(按不同于一行的方式来组织元素,例如按层次或是按网络的方式)。
- 集合中元素之间的组织方式通常由两个因素决定,一、它们加入集合的次序。二、元素之间的固有关系。
- 抽象数据类型(ADT)忽略许多的细节为的是方便控制复杂的系统。
- 栈集合以LIFO的方式处理元素
- 泛型是本章的重点,有及表示某类某方法某变量为泛型,但有些时候用具体的类来代替,从而实例化
- 使用栈来实现计算后缀表达式
- 使用数组或链表来实现栈是本章的练习重点
教材学习中的问题和解决过程
- 问题1:对于使用链表来实现栈还有很多疑问
- 问题1解决方案:相比于数组的简单结构,链表多了一个使用LinearNode结点类,来指向表中下一个LinearNode的引用,和指向该结点中保存的元素的引用。每个结点保存一个泛型类型,当实例化结点时才确定其类型。LinearNode不仅仅在栈中实现,在下一章的队列中也有使用到LinearNode。
代码调试中的问题和解决过程
- 问题1:在课上练习的用数组实现栈和用链表实现栈没有完成,以下是对这两个项目的详细分析
用数组实现栈,题目:实现ArrayStack,完成peek,isEmpty,size和toString方法,并用Junit测试
public T pop() throws EmptyCollectionException {
if (this.isEmpty()) {
throw new EmptyCollectionException("No elements available");
} else {
T result = this.stack[this.count]; // 设置泛型变量result用来存储pop出来的元素;
this.stack[this.count] = null; // 将原位置的数组位清除元素,设为null;
return result; // 返回pop出来的元素
}
}
public T peek() throws EmptyCollectionException {
if (this.isEmpty()) {
throw new EmptyCollectionException("No elements available");
} else {
return this.stack[this.count - 1]; // 弹出元素但不返回
}
}
public boolean isEmpty() {
return this.count == 0; //另count=0,即空
}
public int size() {
return this.count; //count记录长度,返回count即为长度
}
public String toString() {
String result = "<top of stack>\n"; // 注释栈顶
for(int index = this.count - 1; index >= 0; index--) { //用for循环打印栈中元素
result = result + this.stack[index] + "\n";
}
return result + "<bottom of stack>"; // 注释栈底
}
- 用Junit测试ArrayStack

用链表实现栈,完成LinkedStack,给出size,isEmpty和toString方法的定义,并用Junit测试
public T pop() throws EmptyCollectionException {
if (this.isEmpty()) {
throw new EmptyCollectionException("Pop operattion failed.The stack is empty."); //pop操作的时候若链表为空报出异常
} else {
T result = this.top.getElement();
this.top = this.top.getNext();
this.count--;
return result;
}
}
public void push(T element) {
LinearNode<T> temp = new LinearNode(element);
temp.setNext(this.top);
this.top = temp;
this.count++;
}
public T peek() throws EmptyCollectionException {
if (this.isEmpty()) {
throw new EmptyCollectionException("Pop operattion failed.The stack is empty.");
} else {
return this.top.getElement();
}
}
public boolean isEmpty() {
return this.count == 0;
}
public int size() {
return this.count;
}
public String toString() {
String result = "";
for(LinearNode current = this.top; current != null; current = current.getNext()) {
result = result + current.getElement().toString() + "\n";
}
return result;
}
- 结点类LinearNode
public class LinearNode<T> {
private LinearNode<T> next = null;
private T element;
public LinearNode() {
this.element = null;
}
public LinearNode(T elem) {
this.element = elem;
}
public LinearNode<T> getNext() {
return this.next;
}
public void setNext(LinearNode<T> node) {
this.next = node;
}
public T getElement() {
return this.element;
}
public void setElement(T elem) {
this.element = elem;
}
}
- 用Junit测试LinkedStack

上周考试错题总结
本周结对学习情况
- [20162314](博客链接)
- 结对照片
- 结对学习内容
学习进度条
| 代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
|---|---|---|---|---|
| 目标 | 5000行 | 30篇 | 400小时 | |
| 第一周 | 200/200 | 1/1 | 20/20 | |
| 第二周 | 200/200 | 1/1 | 20/20 | |
| 第三周 | 200/200 | 1/1 | 22/22 | |
| 第四周 | 1000/1000 | 1/1 | 30/30 | |
| 第五周 | 1000/1000 | 1/1 | 22/22 |
第五周作业总结(内含用Junit测试ArrayStack和LinkedStack课堂练习报告)的更多相关文章
- 2018-2019-1 20189221《Linux内核原理与分析》第五周作业
2018-2019-1 20189221<Linux内核原理与分析>第五周作业 实验四 实验过程 当用户态进程调用一个系统调用时,cpu切换到内核态并开始执行一个内核函数. 在Linux中 ...
- 2017-2018-1 JaWorld 第四、五周作业
2017-2018-1 JaWorld 第四.五周作业 两周工作内容 小组讨论并确定最终的app雏形 合作完成需求说明书 工作分工 成员 分工 比例 陈是奇 1.引言 8% 马平川 2.1-2.5 产 ...
- 2017-2018-1 JAVA实验站 第四、五周作业
2017-2018-1 JAVA实验站 第四.五周作业 JAVA实验站小组成员 学号 名字 职务 20162318 张泰毓 组长 20162303 石亚鑫 组员 20162304 张浩林 组员 201 ...
- 2017-2018-1 20179205《Linux内核原理与设计》第五周作业
<Linux内核原理与设计>第五周作业 视频学习及操作分析 一.用户态.内核态和中断 内核态在CPU执行中对应高执行级别,执行级别为0级,具有特权指令,可以访问任意物理地址:用户态执行级别 ...
- 第五周作业:markdown语法小总结
第五周作业 markdown语法总结 早就想写这么一个文章了,关于markdown的语法,因为最近使用的比较多,所以特地总结一下 一,标题 首先要介绍的就是标题, 标题一共有六级 # h1 ## h2 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第五周作业
<Linux内核原理与分析>第五周作业 一.上周问题总结: 虚拟机将c文件汇编成汇编文件时忘记添加include<stdio.h> gdb跟踪汇编过程不熟练 二.本周学习内容: ...
- 2019春第五周作业Compile Summarize
这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 在这里 我在这个课程的目标是 能够精通关于数组内部运作原理 这个作业在哪个具体方面帮助我实现目标 如何输出一行的连续字符 参考文献与网址 ...
- 第四周预习作业and第五周作业
第四周预习作业 统计一行文本的单词个数 本题目要求编写程序统计一行字符中单词的个数.所谓"单词"是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个. 输入格式: 输入 ...
- 20162327WJH第五周作业
学号 20162327 <程序设计与数据结构>第5周学习总结 教材学习内容总结 1.java是一种面向对象的语言.面向对象是一种编程方法.更是一种思维方式. 2.面向对象编程的终极目标是消 ...
随机推荐
- 第一章:AI人工智能 の 数据预处理编程实战 Numpy, Pandas, Matplotlib, Scikit-Learn
本课主题 数据中 Independent 变量和 Dependent 变量 Python 数据预处理的三大神器:Numpy.Pandas.Matplotlib Scikit-Learn 的机器学习实战 ...
- C++程序设计入门 之常量学习
常量: 常量的定义格式:const datatype CONSTANTNAME = VALUE 常量的命名规范:符号常量(包括枚举值)必须全部大写并用下划线分隔单词 例如:MAX_ITERATIONS ...
- JavaSE日常笔记汇总
1. If和switch的比较 2. continue的注意事项 在for循环中,当执行continue语句时,i++还是会执行,continue语句只代表此次循环结束,i还是会累加,并继续执行下次循 ...
- 网格布局(GridLayout) 行数与列数
1.如果网格布局对象未指定具体的“行数”和“列数”,那么它将拥有1行和动态的列数. import java.awt.Button; import java.awt.Frame; import java ...
- Eclipse Git提交代码,多了一个“工程同名的文件夹”,找不到解决办法!!!
提交代码到Git仓库,有2种方式. 第1种,先在OSChina等平台创建git项目,本地clone,再在本地修改代码提交.√ 这种方式,没任何问题. 不过,我平时不喜欢这么干. 第2种,本地已经有了项 ...
- PyQt5 笔记(04):主窗口卡死问题
本文基于:windows 7 + python 3.4 知识点: 1. 将 time.sleep 替换为 QTimer 2. 将 time.sleep 放入到 QThread 3. 使用 QThrea ...
- 洛谷 P1939 【模板】矩阵加速(数列)
题目描述 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 求a数列的第n项对1000000007(10^9+7)取余的值. 输入输出格式 输入格式: 第一行一 ...
- 【HNOI2014】米特运输
题面 题解 首先我们需要看懂题目 然后我们需要发现一个结论 只要有一个节点的权值确定,那么整棵树的权值就确定了 就像这样:(图片来源于网络,侵删) 然后我们根据这张图片,可以设\(f[i] = a[i ...
- Spring Boot:项目打包成war并发布到Tomcat上运行
一.修改pom文件 1. 因为SpringBoot中嵌入的有Tomcat,因此要移除嵌入式的Tomcat插件 <dependency> <groupId>org.springf ...
- 洛咕 P2403 [SDOI2010]所驼门王的宝藏
简单tarjan. 一行的横天门如果暴力连边会被卡成平方,所以只要相邻两个横天门连双向边,再随便选一个横天门向整行连边即可.纵寰门同理.ziyou门直接map暴力连边. 然后tarjan直接dp. / ...