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的代码没法上传到马云,在这里贴出来

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了。

  • 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,做题的时候没有记熟,想当然的选了C

结对及互评

本周结对学习情况

  • [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 | |

参考资料

posted @ 2018-09-18 21:41  N-idhogg  阅读(193)  评论(0编辑  收藏  举报