20172321 2018-2019-1 《程序设计与数据结构》第二周学习总结

教材学习内容总结

第三章:集合概述-栈

  • 3.1集合
    • 集合是一种隐藏了实现细节的抽象。
    • 集合能够分为两大类:包括线性集合和非线性集合。
    • 抽象:抽象能隐藏某些细节,就例如书上的例子,汽车的方向盘等控制装置就是一种抽象,让咱们不用关心底层细节就能控制整个操做过程。
    • 抽象数据类型:一个抽象数据类型(ADT)是由数据和在该数据上所实施的操做构成的集合,一个ADT有名称、值域和一组容许执行的操做。
    • 数据结构是一种用于实现集合的编程结构集。咱们能够利用线性数据结构来实现非线性集合。
  • 3.2栈集合
    • 栈(stack)是一种线性集合,其元素添加和删除都在同一端进行。
    • 栈的元素是按照后进先出(LIFO)(即 Last in ,first out)的方法进行处理的,最后进入栈中的元素最早被移出。
    • 栈的一个本性——全部操做都是在一端进行的,所以,在中间或者底部删除、增添就很困难。(若是须要访问集合中间或者底部的元素,那么不适合栈做为数据结构)
    • 栈的一些操做
    操做 描述
    push 添加一个元素到栈的顶部
    pop 从栈的顶部移出一个元素
    peek 查看栈顶部的元素
    isempty 肯定栈是否为空
    size 肯定栈的元素数目
  • 3.3主要的面向对象的概念
    • 多态引用是一个引用变量,他能够在不一样地点引用不- 同类型的对象。术语“多态性”可定义为“具备多种形式”。经过多态引用调用的某个方法,在每次调用的时候均可以发生变化。
    • 继承可用于建立一个类层次,一个引用变量可用于指向与之相关的任意对象。继承就是从已有类派生出一个新类的过程。新类自动地含有初始类的部分和所有变量和方法。
    • 泛型(generic type):一个集合所管理的对象的类型要在实例化该集合对象时才肯定。泛型保证了集合中对象类型的兼容性。
  • 3.5异常
    • 异常(exception)就是一种对象,它定义了一种非正常或错误的状况。异常有程序或运行时环境抛出,能够按预期的被捕获或被正确处理。
  • 3.6栈ADT
    • 栈接口类中的各个方法
public interface Stack<T>
{
    
    public void push (T element);

    public T pop();
    
    public T peek();
    
    public boolean isEmpty();
    
    public int size();
    
    public String toString();
}
  • 3.8ArrayStack类
    • 泛型(包括泛型数组)不能被实例化。这就是咱们必须建立一个存储Object引用的数组,而后把他转换成泛型数组的缘由。
    stack = (T[])(new Object[initialCapiry])

第四章:链式结构——栈

  • 4.1连接作引用
    • 对象引用变量能够用来建立链式结构,链式结构是一种数据结构
      -对象引用变量存放的是对象的地址,表示对象在内存中的存储位置
      -在链表中存储的对象一般泛称为该链表的结点,注:须要一个单独的引用变量来表示链表的首结点,链表终止于其next引用为空的结点
  • 4.2管理链表
    • 改变引用顺序是维护链表的关键
    • 处理链表的首结点须要进行一些特殊的处理,个人理解是,若是处理首结点时没有注意front引用,就可能致使整条链表的丢失。
  • 4.5使用栈来穿越迷宫
    • 能够用栈来模拟递归处理,以跟踪恰当的数据
  • 4.6用链表实现栈
    • 这一章用链表实现栈LinkedStack和上一章用数组实现栈ArrayStack联系很大,各有优劣,学习的时候应该触类旁通,相互思考。

教材学习中的问题和解决过程

  • 问题1:不能明白泛型究竟是什么,能够怎么使用
  • 解答:==泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,而后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,相似于方法中的变量参数,此时类型也定义成参数形式(能够称之为类型形参),而后在使用/调用时传入具体的类型(类型实参)。==;泛型的参数类型能够用在类、接口和方法的建立中,分别称为泛型类、泛型接口和泛型方法。虽然仍是有点懵逼,可是约莫大概也许是明白了一部分

代码调试中的问题和解决过程

  • 在编写完pp3.2而且运行的时候,发现了一个诡异的错误,就是它只会把最后一个入栈的字符弹出,后面的全是null。

  • 最后通过调试,发现是写栈的时候出了一点问题,指针没有正确的移动。

代码托管

PP3.9的代码无法上传到马云,在这里贴出来html

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.util.Stack;

public class MainActivity extends AppCompatActivity {

    Stack<String> stack = new Stack();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button1 = (Button)findViewById(R.id.button1);
        button1.setOnClickListener(new myButtonOnClickListener1());
        Button button2 = (Button)findViewById(R.id.button2);
        button2.setOnClickListener(new myButtonOnClickListener2());
    }

    public class myButtonOnClickListener1 implements View.OnClickListener{
        public void onClick(View view){
            EditText editText1 = (EditText)findViewById(R.id.editText1);
            stack.push(editText1.getText().toString());
            EditText editText2 = (EditText)findViewById(R.id.editText2);


            editText2.setMovementMethod(ScrollingMovementMethod.getInstance());
            editText2.setText(editText2.getText(),TextView.BufferType.EDITABLE);
            editText2.setText(stack.toString(), TextView.BufferType.EDITABLE );
            System.out.println(editText2.getText().toString());
        }
    }

    public class myButtonOnClickListener2 implements View.OnClickListener{
        public void onClick(View view){

            EditText editText1 = (EditText)findViewById(R.id.editText1);
            stack.pop();
            EditText editText2 = (EditText)findViewById(R.id.editText2);


            editText2.setMovementMethod(ScrollingMovementMethod.getInstance());
            editText2.setSelection(editText2.getText().length(),editText2.getText().length());
            editText2.setText(stack.toString(),TextView.BufferType.EDITABLE);
            System.out.println(editText2.getText().toString());
        }
    }

上周考试错题总结

  • 1.Which Growth function has the highest order?
    • A .O(n log n)
    • B .O(n2)
    • C .O(2n)
    • D .O(log n)
    • 正确答案: C 你的答案: B
  • 解析:==c(常量)<㏒₂n < n < n㏒₂n < n²< n³ < 2ⁿ < 3ⁿ< n!==很明显,这道题若是把B看成n^2就会选B了。java

  • 2.Which of the following has the smallest time complexity?
    • A .3n+5+2n
    • B .logn+2
    • C .3n+4
    • D .nlogn
    • 正确答案: B 你的答案: C
  • 解析:㏒₂n < n,作题的时候没有记熟,想固然的选了Candroid

结对及互评

本周结对学习状况

  • [20172324曾程](http://www.cnblogs.com/amberR/p/9670328.html)
  • 博客中值得学习的或问题:
    • 内容详略得当;
    • 代码调试环节比较详细;
  • 基于评分标准,我给本博客打分:14分。得分状况以下:
    • 正确使用Markdown语法(加1分)
    • 模板中的要素齐全(加1分)
    • 教材学习中的问题和解决过程, 加4分
    • 代码调试中的问题和解决过程, 加4分
    • 本周有效代码超过300分行,加2分
    • 其余加分,加2分
    • 排版精美的加一分
    • 进度条中记录学习时间与改进状况的加1分

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 0/0 1/1 8/8
第二周 671/671 1/2 17/25

参考资料

相关文章
相关标签/搜索