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控件:模拟栈的结构

活动代码

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();}}});}
}

效果截图

代码托管

结对及互评

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

点评模板:

  • 博客中值得学习的或问题:

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

    本周结对学习情况

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

其他

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

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/200 1/2 10/20 了解数据结构及算法
第二周 664/500 2/3 10/20 系统的学习了查找和排序
第五周 1333/1000 2/2 15/20 栈数据结构的学习

参考资料

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

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

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

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

  1. 20162329张旭升 2016-2017-2 《程序设计与数据结构》第九周学习总结

    20162329张旭升 2016-2017-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 1.建立数据库连接:我们是通过老师给的XAMPP程序来配置自己的数据库,然后根据教程 ...

  2. 20162329张旭升 2016-2017-2 《程序设计与数据结构》第七周学习总结

    20162329张旭升 2016-2017-2 <程序设计与数据结构>第七周学习总结 教材学习内容总结 通过继承实现多态:若两个类是is-a关系,将子类对象向上转型为父类后该变量就可以实现 ...

  3. 20162329张旭升 2016-2017-2 《程序设计与数据结构》第八周学习总结

    20162329张旭升 2016-2017-2 <程序设计与数据结构>第八周学习总结 教材学习内容总结 1.异常的产生:当程序中出现不符合计算机逻辑的情况,在编译运行时就会出现异常. 2. ...

  4. 20162329 张旭升2016-2017《程序设计与数据结构》课程总结

    课程总结 前期博客 预备作业即周总结: 预备作业01 20162329: 预备作业02 20162329: 预备作业03 20162329: 20162329 <程序设计与数据结构>第一周 ...

  5. 20162329张旭升 2017-2018-2 《程序设计与数据结构》第三周学习总结

    20162329 2017-2018-1 <程序设计与数据结构>第三周学习总结 教材学习内容总结 1.查找 线性查找: (对任意数组)顺序的对数组内的元素一个一个的进行比较,直到找到所查找 ...

  6. 20172304 《程序设计与数据结构》第九周学习总结

    20172304 <程序设计与数据结构>第九周学习总结 教材学习内容总结 本章是第十五章,主要介绍了图的概念. 首先我来介绍一下图的基本结构. 从逻辑上讲,图是由边和结点组成的,在我的理解 ...

  7. 20162302 《程序设计与数据结构》第一周学习总结

    20162302 2017-2018-1 <程序设计与数据结构>第一周学习总结 教材学习内容总结 很多情况下时间和空间不可兼得.在不同的情况下,要么用时间换空间,要么用空间换时间. 引出算 ...

  8. 20172315 2017-2018-2 《程序设计与数据结构》第九周学习总结

    学号 2017-2018-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 异常是定义一个非正常情况或错误的对象,由程序或运行时环境抛出. 异常与错误不同,错误代表不可恢复的问题 ...

  9. 20172304 《程序设计与数据结构》 第二周学习总结

    20172304 <程序设计与数据结构>第二周学习总结 教材学习内容总结 本周主要学习了第三章和第四章的内容 第三章 集合概述--栈 3.1集合 集合是一种聚集组织了其他对象的对象. 集合 ...

最新文章

  1. Qt信号和槽连接方式的选择
  2. python global和nonlocal_3.关于作用域知识的额外补充global和nonlocal关键字
  3. 类的主动使用与被动使用等
  4. 内核中的 likely() 与 unlikely()
  5. 数据库怎么选择?终于有人讲明白了
  6. 软件测试:Jmeter关联详解
  7. 录入班级学生姓名科目成绩_如何利用钉钉发布考试成绩
  8. linux sudo使用和sudoers配置详解
  9. sqlite配置选项
  10. Smartmontools检测硬盘坏道
  11. 文本每行的某列作为参数传递给别的程序
  12. lcd4linux 支持的相框,最新版AIDA64支持LCD4WIN相框太给力了(20140826更新啦)!
  13. 凸优化理论基础3——凸集和凸锥重要例子
  14. 飞书:远程办公更轻松
  15. ABAP VF01 / VF04销售开票增强 增加校验
  16. oracle迁移mysql自增序列问题
  17. K8S 快速入门(十六)实战篇:StorageClass(存储类)
  18. 天美服务器未响应,王者荣耀服务器上热搜,无数玩家遭遇掉线烦恼,天美该怎么办?...
  19. 骁龙820 html5 dom,苹果iPhone 7 A10处理器探秘:这项性能 11倍于骁龙820!
  20. 《蹭课神器》项目总结

热门文章

  1. 汇编指令处理的数据长度
  2. 干涉测量技术的应用_技术分享 | 石化行业测量仪表应用在线答疑
  3. c语言编写的每个函数都可以进行独立的编译,2017年辽宁师范大学计算机与信息技术学院836C语言程序设计考研冲刺密押题...
  4. UVA 473——Raucous Rockers
  5. python中的与或非_「Python基础」 While 循环语句
  6. HTTP清晰的学习笔记
  7. c++中容器(STL)的共性与使用的时机
  8. UVA - 514:Rails
  9. 判断字符串出栈合法性
  10. 服务器之select