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共…

js中的extend的用法及其JS中substring与substr的区别

1. JS中substring与substr的区别 之前在项目中用到substring方法&#xff0c;因为C#中也有字符串的截取方法Substring方法&#xff0c;当时也没有多想就误以为这两种方法的使用时一样的。这样就直接按照在C#中使用Substring的方式&#xff0c;直接在js中用了substring&#…

事件处理程序

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

fis3 配置文件

1 代码: fis.match(*.less, {// fis-parser-less 插件进行解析parser: fis.plugin(less),// .less 文件后缀构建后被改成 .css 文件rExt: .css });// 配置配置文件&#xff0c;注意&#xff0c;清空所有的配置&#xff0c;只留下以下代码即可。 fis.match(*.{png,js,css}, {rel…

核心指导网络由任务编码器_如何在现实世界中与实际用户一起指导您的编码和编码生涯...

核心指导网络由任务编码器by Bob Berry由Bob Berry 如何在现实世界中与实际用户一起指导您的编码和编码生涯 (How to guide your coding and your coding career with real users, in the real world) Experience drives everything. It’s the basis of our reality. It’s a…

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

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

leetcode1433. 检查一个字符串是否可以打破另一个字符串(贪心算法)

给你两个字符串 s1 和 s2 &#xff0c;它们长度相等&#xff0c;请你检查是否存在一个 s1 的排列可以打破 s2 的一个排列&#xff0c;或者是否存在一个 s2 的排列可以打破 s1 的一个排列。 字符串 x 可以打破字符串 y &#xff08;两者长度都为 n &#xff09;需满足对于所有 …

cordova 人脸识别_html5与EmguCV前后端实现——人脸识别篇(一)

上个月因为出差的关系&#xff0c;断更了很久&#xff0c;为了补偿大家长久的等待&#xff0c;送上一个新的系列&#xff0c;之前几个系列也会抽空继续更新。大概半年多前吧&#xff0c;因为工作需要&#xff0c;我开始研究图像识别技术。OpenCV在这方面已经有了很多技术积累&a…

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

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

git-命令

git config --global user.email “邮箱” git config --global user.name ”用户名” git init           初始化 忽略指定文件 echo "temp/" >> .gitignore echo "private_key" >> .gitginore 状态 git status 添加 git add …

C语言 floor四舍五入,Math函數的四舍五入,Floor,Ceiling,Round的一些注意事項!...

1.Math.Round&#xff1a;四舍六入五取偶引用內容Math.Round(0.0) //0Math.Round(0.1) //0Math.Round(0.2) //0Math.Round(0.3) //0Math.Round(0.4) //0Math.Round(0.5) //0Math.Round(0.6) //1Math.Round(0.7) //1Math.Round(0.8) //1Math.Round(0.9) //1說明&#xff1a;對於…

Command Magicks:如何使用控制台处理文件和字符串

by Luciano Strika通过卢西亚诺斯特里卡(Luciano Strika) Command Magicks&#xff1a;如何使用控制台处理文件和字符串 (Command Magicks: How to Manipulate Files and Strings with the Console) As developers, there are lots of repetitive things we do every day that…

dreamweaver后缀名_让 Dreamweaver 8 支持其它扩展名的方法

有的时候&#xff0c;我们为了网站的安全考虑&#xff0c;常常会修改网站的扩展名&#xff0c;如我看到有些网站的扩展名为 *.do&#xff0c;很明显这个扩展名是有意改掉的&#xff0c;可是改了这扩展名对于我们修改网页来说就麻烦了&#xff0c;比如用 Dreamweaver 8 来修改的…

sublime 3143 注册码

请大家支持购买正版&#xff0c;或者使用Atom、Vimsublime 3143版本的注册码&#xff1a;—– BEGIN LICENSE —– TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD93 4DCBA022 FAF60790 61AA12C0 A37081C5 D0316412 4584D136 94D7F7D4 95BC8C1C 527DA828 560B…

【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;一起来看看吧!谷歌广告异步代码和同步代码的解决方法选择同步还是异步…

openssl 加密解密 指令_Shell openssl命令加密解密字符串

Linux下的 openssl 命令解密我们以在线加密网站为例 http://tool.chacuo.net/cryptdes我们选择des cbc模式&#xff0c;密钥为abcdefgh&#xff0c; 偏移量为12345678&#xff0c;以base64输出结果 对hello进行加密&#xff0c;得到结果8Snw/EmQdY我们再用将在线网站改用shell命…

使用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…

开始使用gradle

前提配置gradle环境 每个gradle构建都是以一个脚本开始的。gradle构建默认的名称为build.gradle。当在shell中执行gradle命令时&#xff0c;gradle会去寻找为build.gradle文件&#xff0c;如果找不到就会显示帮助信息。 下面我们以经典的helloworld为例。 1、首先建立一个build…