• 学号 2018-2019-20172309 《程序设计与数据结构(下)》第二周学习总结


    教材学习内容总结

    教材学习内容总结

    第三章

    3.1集合

    • 集合是一种聚集、组织其他对象的对象。
    • 集合分为线性集合非线性集合
    • 集合中的元素通常是按照它们添加到集合的顺序,或者是按照元素之间的某种内在关系来组织的。
    • 集合是一种隐藏了实现细节的抽像。
    • 数据结构是一种用于实现集合的基本编成结构。

    3.2栈集合

    • 栈的元素是按照后进先出(LIFO)的方法进行处理的,最后进入栈的元素最先被移除。

    3.3 如何构建一个栈:

    • 定义一个java接口StackADT,表示作用于泛型T
    public interface StackADT<T> {//public   保留字   泛型参数
        /**
         * 弹出栈顶
         * @return
         */
        public T pop();
    
        public  void  push(T element);
        /**
         * 得到栈顶,但不弹出
         * @return
         */
        public T peek();
    
        public boolean isEmpty();
    
        /**
         * 得到栈的大小
         * @return
         */
        public int Size();
    
        /**
         * 打印出栈
         * @return
         */
        @Override
        public String toString();
    }
    
    • ArrayStack类:
    public class Stack<T> implements StackADT<T>{
    
        /**
         * 1. 数组的大小
         * 2. 定义一个数组
         * 3. 确定栈顶位置
         */
        private  int size=100;
        private  T[] stack;
        private  int top;
    
        public  Stack(){//构造函数
            top = 0 ;
            stack = (T[]) (new Object[size]);
        }
        public  Stack(int a){//方法重载
            top = 0 ;
            stack = (T[]) (new Object[a]);
    
        }
    }
    
    • Push操作:
     @Override
        public void push(T element) {
            if (Size() == stack.length){
                expandCapacity();
            }
            stack[top] =   element;
            top++;
        }
    
    • Pop操作
     @Override
        public T pop() throws EmptyCollectionException{
            if (isEmpty()) {
                throw new EmptyCollectionException("Stack");
            }
            top--;
            T result = stack[top];
            stack[top]=null;
    
            return result;
        }
    
    • peek操作
    @Override
        public T peek() throws  EmptyCollectionException{
            if (isEmpty()){
                throw  new  EmptyCollectionException("Stack");
            }
            return stack[top-1];
        }
    
    • 打印:
    @Override
        public String  toString(){
            String result = "";
            for(int i =0;i<Size();i++)
            {
                result += " " + stack[i];
            }
            return result;
        }
    
    • EmptyCollectionException类
    public class EmptyCollectionException extends  RuntimeException {
        public EmptyCollectionException(String collection){
            super("The " + collection + " is empty. ");
        }
    }
    
    
    • 运行结果:

    3.4本章课后作业:

    • pp3.2
    • PP3.8
    • pp3.9 : 这题不会上传,欢迎学长学姐过来检查_

    第四章:

    4.1链接作为引用

    • 对象引用变量可以用来创建链式结构。
    • 链表有一些对象构成,其中每个对象指向了链表中的下一个对象。
    • 链表会按需求动态增长,因此在本质上没有容量限制。
    • 如何创建一个链表:
    public class Person
    {
              private String name;
              private String address;
              private Person next; //到另一个Person的链接
              //其他内容
    }
    
    

    4.2 管理链表

    • 访问元素
    Person current = first;
    for ( int i = 0; i<3; i++){
    current = current.next;
    }//访问到第四个元素
    String  s = current.name//得到属性name
    
    • 插入节点
        public static void InsertNode(Student Head, Student node){//当.next为null时,插入node
    
            Student node1 = Head;
            if (node1==null){
                Head=node;}
            else {
                while(node1.next!= null){
                    node1=node1.next;
                }
    
                node1.next = node;
            }
        }
    
     public static  void InsertNode(Student Head,Student node1,Student node2,Student node3){//将node2插入在node1与node3之间(方法重载)
            Student node0  =Head;
    
            while(node0.number != node1.number && node0!= null){
                node0 = node0.next;
            }
            if (node0.number == node1.number){
                node0.next = node2;
                node2.next = node3;}
            else{
                System.out.println("没有找到:"+node1.number+"!");
            }
        }
    
    • 删除节点:
    public static  void DeleteNode(Student Head, int number){//删除学号为number 的人
            Student node = Head;
            if (node!=null&&node.number!=number){
                while(node.next.number!=number){
                    node = node.next;
                }
                node.next =node.next.next;
            }
            else {
                if (node ==null){
                    System.out.println("链表中没有学号为:"+number+"的这个人。");
                }
                else {
                    node.next = node.next.next;
                }
            }
        }
    

    4.3用链表建立栈

    public class LindedStack<T> implements StackADT<T> {
    
        private int count;//用于计算栈中元素的个数
        private LinearNode<T> top;//指向顶栈的指针
        public LindedStack(){
            count = 0 ;
            top  = null;
        }
    
        @Override
        public T pop() {
            if (isEmpty())
                throw new EmptyCollectionException("Stack");
    
            T result = top.getElement();
            top = top.getNext();
            count--;
            return result;
        }
    
        @Override
        public void push(T element) {
            LinearNode<T> temp = new LinearNode<T>(element);
    
            temp.setNext(top);
            top = temp;
            count++;
        }
    
        @Override
        public T peek() throws EmptyCollectionException
        {
            if (isEmpty()){
                throw new EmptyCollectionException("Stack");}
    
                T result = top.getElement();
            return result;
        }
    
        @Override
        public boolean isEmpty() {
            if (count == 0)
                return true;
            else
                return false;
        }
    
        @Override
        public int Size() {
            return count;
        }
    
        public String toString(){
            String result="";
            for (int i =0;i<count;i++){
                System.out.println(top.getElement());
                top = top.getNext();
            }
            return result;
        }
    }
    
    • 测试结果

    4.4 本章作业

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

    • 暂时没发现什么问题。

    代码托管

    上周考试错题总结

    • 错题1:
    • 原因,理解情况:
    • 错题2:2的n次方,不是2n.
    • 原因,理解情况:算法的阶次就是算法的复杂度

    点评模板:

    结对伙伴:20172310

    点评队友:

    • 队友问题记录的非常仔细,值得自己学习,以后遇到问题得记录下来,不然会忘记。
    • 关于课本上遇到的问题,队友没有说明自己的理解情况(比如什么是泛型),至少我觉的官方的讲解太复杂····

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 075/200 1/1 05/20
    第二周 560/500 1/2 13/38

    参考资料:

  • 相关阅读:
    JNI和NDK的关系
    JNI和NDK的关系
    Android SDK结构分析
    设计模式:单例模式
    编程规范:占位符
    设计模式:工厂模式
    代码整洁之道----读书笔记
    个人编程规范
    装饰器函数
    异常处理
  • 原文地址:https://www.cnblogs.com/dky-wzw/p/9668976.html
Copyright © 2020-2023  润新知