20162329 张旭升 2017 - 2018 《程序设计与数据结构》第五周总结

20162329 2017-2018-1 《程序设计与数据结构》第五周学习总结

教材学习内容总结

1.学习目标

  • 了解集合的概念

  • 了解并使用抽象数据类型

  • 初步了解使用Java泛型

  • 学习栈这种数据结构

  • 用数组、链表实现栈

2.学习内容

集合的概念:

集合是手机并组织其他对象的对象,他定义了访问和管理那些称为集合元素的其他对象的一种具体方式。在我们所学习的Java编程语言的庞大类库中,Java Collections API 就表示了一些使用不同方式实现的几类集合的类。

抽象数据类型:

事物的抽象往往可以隐藏其中大部分细节,只需要通过一些小的接口就可以控制一个庞大的体系,所以在编程时抽象的思维是非常重要的,当你需要将一件事情用编程的方法实现的时候,首先要做的是将这件事情抽象出一些接口,就拿车来举个例子:

首先车是一个庞大的体系,但是我们在控制车的时候却并没有去考虑车的内部零件是如何运作的,我们只是同过方向盘,踏板等来实现对它的控制,而这些我们实在知道的就是智造车的人给我们提供的接口。这样以来用户在使用它的时候就不需要考虑应该用哪个零件带动哪个零件它才能转弯这种实际问题。
这样看我们的类也是一样的,我们只是提供给用户一些看的到的方法(函数),用户通过这些方法的使用就能调用一个庞大的类,而并不需要去考虑类中的逻辑。

泛型

泛型是在Java 5.0后才开始支持基于泛型来定义类的,泛型的作用是在我们实例化类的对象时可以同时制定一种储存数据的类型,这样就避免了我们要为不同的被储存类创建多个相应类型的类,大大减少了代码复用,增加了代码的可用能力,而这种方法在我们的Java Collections API 中尤其有用,因为既然是集合就必定需要储存元素,但是每次用户用来存储的元素不可能都是一种类型,这时泛型的作用就大大体现。

栈也是集合中的一种,他的模型就类似于现实中的羽毛球桶一样,每次放置的羽毛球都只能放在前一个羽毛球的后面, 每次取羽毛球的时候只能从后面取最后一个放进去的,也就是一种LIFO结构

3.用数组、链表实现栈

  • 数组实现栈 ArrayStack

           public class ArrayStack<T> implements Stack<T>{private final int DEFAULT_CAPACITY = 100;private int num;private T[] stack;public ArrayStack(){num = 0;stack = (T[])(new Object[DEFAULT_CAPACITY]);}public ArrayStack (int lenth){num = 0;stack = (T[])(new Object[lenth]);}public void push (T element){if (size() == stack.length)expandCapacity();stack[num] = element;num++;}public T pop() throws Exception{if (isEmpty())throw new Exception("Stack is empty");num--;T result = stack[num];stack[num] = null;return result;}public T peek() throws Exception{if (isEmpty())throw new Exception("Stack is empty");return stack[num -1];}public boolean isEmpty(){return (num == 0);}public int size(){return num;}public String toString(){String result = "";for (int scan = 0; scan < num; scan++)result = result + stack[scan].toString() + "\n";return result;}private void expandCapacity(){T[] larger = (T[])(new Object[stack.length*2]);for (int index=0; index < stack.length; index++)larger[index] = stack[index];stack = larger;}}
  • 链表实现栈 LinkedStack

      public class LinkedStack<T> implements Stack<T>{private int num;private LinearNode<T> Next;public LinkedStack(){num = 0;Next = null;}public void push (T element){LinearNode<T> temp = new LinearNode<T> (element);temp.setNext(Next);Next = temp;num++;}public T pop() throws Exception{if (isEmpty())throw new Exception("Stack");T result = Next.getElement();Next = Next.getNext();num--;return result;}public T peek() throws Exception{if (isEmpty())throw new Exception("Stack");return Next.getElement();}public boolean isEmpty(){return (num == 0);}public int size(){return num;}public String toString(){String result = "";LinearNode current = Next;while (current != null){result = result + (current.getElement()).toString() + "\n";current = current.getNext();}return result;}}

Android 开发一个关于栈的小APP

界面布局:

EditText控件:输入需要加入栈中的元素
Button控件:设置push压栈操作和pop出栈操作
TextView控件:模拟栈的结构
1065476-20171015163545746-78432921.png

活动代码

public class MainActivity extends AppCompatActivity{EditText editText;Button pop,push;TextView Stack;String result;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);editText = (EditText)findViewById(R.id.in);pop = (Button)findViewById(R.id.pop);push = (Button)findViewById(R.id.push);Stack = (TextView)findViewById(R.id.Stack);final ArrayStack<String> stack = new ArrayStack<>();push.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {result = editText.getText().toString();stack.push(result);Stack.setText(stack.toString());}});pop.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {try {stack.pop();Stack.setText(stack.toString());} catch (Exception e) {e.printStackTrace();}}});}
}

效果截图

1065476-20171015163742059-1128482171.png

代码托管

1065476-20171015162809855-1875949475.png

结对及互评

#### 本周并没有在结对方面有什么合作项目

点评模板:

  • 博客中值得学习的或问题:
    • 界面很好看
    • 问题分析可以更详细
  • 其他
    希望我们结对在这学期能相互促进,技术更上一层楼。

    本周结对学习情况

    • 20162302
    • 结对学习内容
      • 一起讨论学习。

其他

这学期的课程难度增加了很多,有些时候感觉自己学到的东西还不扎实,导致有时候做一些懂非常困难,就算最终解决了也会花费很长时间,效率很低,希望能尽快适应新方式新进度。

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周0/2001/210/20了解数据结构及算法
第二周664/5002/310/20系统的学习了查找和排序
第五周1333/10002/215/20栈数据结构的学习

参考资料

  • 《Java程序设计与数据结构教程(第二版)》

  • 《Java程序设计与数据结构教程(第二版)》学习指导
  • ...

转载于:https://www.cnblogs.com/Zhangxusheng/p/7671164.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos 安装trace_前期的准备工作-MacOS Mojave 10.14.3 下安装CentOS 7及Bochs 002

MacOS Mojave 10.14.3 下使用虚拟机安装CentOS 7 以及 Bochs 2.6.9CentOS 7.6.1810 系统下 安装Bochs 2.6.91 下载CentOS 7.6.1810网址为https://www.centos.org/遇到的问题安装后无法使用使用网络&#xff0c;最简单的解决方法就是增加一个新的网络适配器&#xff0c;使用Nat共…

事件处理程序

转载于:https://www.cnblogs.com/ypx666/p/10869448.html

脉冲时间宽度c语言,基于AT89C52脉冲宽度测量仪的设计与实现

赵翠玉摘要&#xff1a;本文基于AT89C52的脉冲宽度测量仪的设计。该仪器测量结果采用了软件数字滤波&#xff0c;消除了测量中抖动问题&#xff0c;测量精度高、稳定性好&#xff0c;具有一定的实用性。关键词&#xff1a;AT89C52;测量仪;脉冲宽度中图分类号&#xff1a;TM935.…

[转载] mysql 索引中的USING BTREE 的意义

索引是在存储引擎中实现的&#xff0c;因此每种存储引擎的索引都不一定完全相同&#xff0c;并且每种存储引擎也不一定支持所有索引类型。 根据存储引擎定义每个表的最大索引数和最大索引长度。所有存储引擎支持每个表至少16个索引&#xff0c;总索引长度至少为256字节。 大多数…

【BZOJ1857】【SCOI2010】传送带 [三分]

传送带 Time Limit: 1 Sec Memory Limit: 64 MB[Submit][Status][Discuss]Description 在一个2维平面上有两条传送带&#xff0c;每一条传送带可以看成是一条线段。两条传送带分别为线段AB和线段CD。lxhgww在AB上的移动速度为P&#xff0c;在CD上的移动速度为Q&#xff0c;在平…

google android广告异步加载,谷歌广告异步代码和同步代码的解决方法

通常大部分人初次接触谷歌google adsense广告联盟都会有疑问&#xff0c;在新建单元界面我们可以看到获取代码类型选项。下面是学习啦小编为大家整理的关于谷歌广告异步代码和同步代码的解决方法&#xff0c;一起来看看吧!谷歌广告异步代码和同步代码的解决方法选择同步还是异步…

使用Docker 安装Elasticsearch、Elasticsearch-head、IK分词器 和使用

使用Docker 安装Elasticsearch、Elasticsearch-head、IK分词器 和使用 原文:使用Docker 安装Elasticsearch、Elasticsearch-head、IK分词器 和使用Elasticsearch的安装 一、elasticsearch的安装 1.镜像拉取 docker pull elasticsearch:tag2.启动 docker run -it -e "disc…

Spring 的持久化实例(JDBC, JdbcTemplate、HibernateDaoSupport、JdbcDaoSupport、SqlSessionDaoSupport等)...

2019独角兽企业重金招聘Python工程师标准>>> 一、表&#xff08;这里用mysql&#xff0c;数据库名为yiibai&#xff09; CREATE TABLE customer (CUST_ID int(10) UNSIGNED NOT NULL,NAME varchar(100) NOT NULL,AGE int(10) UNSIGNED NOT NULL ) ENGINEInnoDB DEFA…

麦克劳林展开式_数学家麦克劳林与牛顿的故事

数学家麦克劳林麦克劳林(Colin Maclaurin1698年2月-1746年6月), 苏格兰数学家&#xff0c;麦克劳林是18世纪英国最具有影响的数学家之一。01麦克劳林是一位牧师的儿子&#xff0c;半岁丧父&#xff0c;9岁丧母。由其叔父抚养成人。叔父也是一位牧师。麦克劳林是一个“神童”&am…

微信小程序把玩(三十三)Record API

微信小程序把玩&#xff08;三十三&#xff09;Record API 原文:微信小程序把玩&#xff08;三十三&#xff09;Record API其实这个API也挺奇葩的&#xff0c;录音结束后success不走&#xff0c;complete不走&#xff0c;fail也不走&#xff0c; 不知道是不是因为电脑测试的原因…

如何获取元素在父级div里的位置_关于元素的浮动你了解多少

首先&#xff0c;在介绍什么是浮动之前我们先介绍一下html中元素的普通流布局方式。在普通流中&#xff0c;元素是按照它在 HTML 中的出现的先后顺序自上而下依次排列布局的&#xff0c;在排列过程中所有的行内元素水平排列&#xff0c;直到当行被占满然后换行&#xff0c;块级…

Java电商项目-5.内容管理cms系统

目录 实现加载内容分类树功能实现内容分类动态添加删除内容分类节点实现内容分类节点的分页显示实现广告内容的添加实现广告内容删除实现广告内容编辑到Github获取源码请点击此处实现加载内容分类树功能 注: 往后将不在说编写远程服务方法和编写web模块等重复语句, 直接用"…

【JS新手教程】LODOP打印复选框选中的任务或页数

之前的博文&#xff1a;【JS新手教程】LODOP打印复选框选中的内容关于任务&#xff1a;Lodop打印语句最基本结构介绍&#xff08;什么是一个任务&#xff09;关于本文用到的JS的eval方法&#xff1a;JS-JAVASCRIPT的eval()方法该文用的是不同checkbox&#xff0c;对应不同的val…

查询范围_企二哥:查询企业经营范围的三种方法

一、查询企业经营范围的三种方法1. 进经营地的工商局网站,有个“全国企业信用信息公示系统”进去后输入公司名称搜索就出来了。2. 有个软件叫做天眼查&#xff0c;打开天眼查输入要查询的公司名称&#xff0c;就可以搜出来了。不光是经营范围&#xff0c;还有许多和企业相关的资…

html显示hdf5文件,python读取hdf5文件

python怎样读取hdf5文件python 中h5py读文件,提示错误File "h5py\_objects完整代码和完整错误信息的图片。Windows环境下给Python安装h5py失败&#xff0c;HDF5已经安装使用pip install h5py命令安装已经安装了HDF5-1.10.0-win64.msi3第一张图上说的是,“不能打开头文件hd…

20145206邹京儒《网络对抗》逆向及Bof基础实践

20145206邹京儒《网络对抗》逆向及Bof基础实践 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件。 该程序正常执行流程是&#xff1a;main调用foo函数,foo函数会简单回显任何用户输入的字符串。 该程序同时包含另一个代码片段&#xff0c…

Haproxy+Keepalived实现负载均衡

HaproxyKeepalived实现负载均衡HAProxy介绍反向代理服务器,支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入新的1.3引入了frontend,backend&#xff1b;f…

C#使用CLR/C++的DLL间接调用Native C++的DLL

C#使用CLR/C的DLL间接调用Native C的DLL 开发环境&#xff1a;win 7 VS2010 简介&#xff1a;C#的exe使用CLR/C间接调用Native C的DLL. 第一步&#xff1a;创建一个C#的Console Application工程-->命名“ConsoleApplication1”。 第二步&#xff1a;创建一个CLR/C的工程&am…

列表输出循环左移_python 列表推导式(经典代码)(21)

文章首发微信公众号&#xff0c;微信搜索&#xff1a;猿说python截止到目前为止&#xff0c;python基础内容已经学习了50%左右&#xff0c;在学习编程过程中&#xff0c;我们不仅要学习python语法&#xff0c;同时也需要学习如何把自己代码写的更美观&#xff0c;效率更高。一.…

Robot Framework自动化测试(一)--- 安装

所需环境&#xff1a; 1、python 2、robotframework  https://pypi.python.org/pypi/robotframework/2.8.5#downloads 3、wxPython ——>是python的一个GUI库&#xff0c;下面要安装的RIDE是基于这个库开发的&#xff0c;所以要安装 地址&#xff1a;https://wxpython.org…