数据结构---绪章

数据结构与算法(本文选自数据结构与算法(Java版)第五版)

本类随笔对本科课程进行归纳总结 

第一章绪论

  对于本章节,学习后要能做到一下三点 1.理解数据结构概念,包括数据逻辑结构,数据存储结构和对数据的操作

                    2.理解抽象数据类型概念,以及与数据结构的关系 

                    3.熟悉算法概念、算法设计和分析方法

 

 

 

 

  1.1数据结构的基本概念

 

 

   1.12数据的逻辑结构

  数据逻辑结构概念主要包含三个方面    数据的逻辑结构     数据的储存结构   数据的操作

  各个数据元素之间的关系可以称之为数据结构

    数据的逻辑结构主要分为三种   线性结构、树结构、图结构

 

 

   线性结构,说白了也就是按顺序排列的结构用元素进行标号,就像123456,或者abcdef这种

                                    学生信息表        它的数据结构是线性表

专业

班级

学号

姓名

性别

出生日期

籍贯

软件工程

软件191

202191101

李月

2001年5月6日

江苏省

软件工程

软件191

202191102

王红

2000年12月9日

安徽省

软件工程

软件191

202191103

秦风

2001年1月5日

浙江省

软件工程

软件191

202191104

吴宁

2001年2月14日

广东省

  树结构                                                                                                                         图结构

   一棵满二叉树  飞机航班

 

 

  数据的储存结构

    基本形式就两种 :顺序储存结构和链式储存结构

    顺序储存结构就像数组一样储存

    链式储存结构 在每一个元素前后都会有一个标记元素,就像地址,通过这些地址元素来对各个元素的顺序进行排序,听起来好像有些模糊

           就像站队,当一个队列站好队,你知道你的前面和后面是谁,前面这个人和后面这个人就像地址一样通过这个来确定顺序

    数据的操作

      学会增删改查就行了

    数据类型

    学过Java,c之类的 就拿Java举例好了

    Java语言的基本数据类型有整型int,整型可以加减乘除之类操作的集合

    抽象数据类型

    是指一个数学模型以及定义在该模型上的一组操作,即 一种数据结构的抽象数据类型包括:数据的逻辑结构,数据操作

    数据抽象

    是指“定义和实现相分离”。

 

    程序员,只考虑对数据执行什么操作(做什么),而不必考虑怎样实现这些操作(怎样做)。

 

    变量 = 表达式

 

    集合概念、运算及抽象数据类型。

 

     集合的数学概念 

     数学中的集合(set)是一些互不相同元素的无序聚集。换言之,集合中的元素间没有关系,当然就没有先后次序,也没有相同元素,也没有按值排序。

      集合运算,设A={a, x},B={b, x},S={x}。

    ①    并集(union),A∪B={x |A或B} 。

    ②    交集(intersection),A∩B={x |A且B} 。

    ③    差集(difference),A-B={x |A且B} 。

    ④    子集(subset),真子集。

                       

 

 

     集合抽象数据类型

    

      ADT Set<T>                           //集合抽象数据类型

  {

        数据:集合中的数据元素,数据元素的数据类型为T

        操作:

        boolean isEmpty();           //判断是否空

        int size();                            //返回元素个数

        T search(T key)                 //查找与key相等元素

        boolean contains(T key)   //包含

        boolean add(T x)              //增加元素x

        T remove(T key)               //删除与key相等元素

        void clear()                        //删除所有元素

        String toString()               //返回所有元素的描述字符串

    }

    ADT Set<T>

    {

        //以下方法描述集合运算,参数是另一个集合

        boolean equals(Object obj)             //比较this与obj是否相等

        boolean containsAll(Set<T> set)    //判断是否子集

        boolean addAll(Set<T> set)            //集合并运算

        boolean removeAll(Set<T> set)      //集合差

        boolean retainAll(Set<T> set)        //集合交

    }

     1.2算法

         是一个有穷规则的集合,其规则确定一个解决某一特定类型问题的操作序列。

    对于算法的设计要完成一下目标

      1.正确性

      2.可读性

      3.健壮性

      4.高时间效率

      5.高空间效率

      1.2.2算法分析

     算法分析主要包含时间代价和空间代价两方面

      1.时间代价分析

      算法在执行的时候,CPU所花费的时间量,成为时间代价。 时间效率是指算法执行时间随着问题的规模增长而增长,对于时间效率,通常使用时间复杂度来衡量      

                                                                  时间复杂度随n变化情况的比较

时间复杂度

n=8(23)

n=10

n=100

n=1000

O(1)

1

1

1

1

O(log2n)

3

3.322

6.644

9.966

O(n)

8

10

100

1000

O(nlog2n)

24

33.22

664.4

9966

O(n2)

64

100

10000

106

  1.一条简单语句的时间复杂度是O(1)

  int count=0;

  2.一个循环的时间复杂度是O(n)

  int n=8, count=0;

  for(int i=1;  i<=n;  i++)

    count++;                          //循环体执行n

  3.以下循环语句的时间复杂度是O(log2 n)

  for(int i=1;  i<=n;  i*=2)        //i2的幂(1,2,4,8)递增

    count++;                            //循环体执行1+              

  4.以下二重循环的时间复杂度为O(n2)

  for(int i=1;  i<=n;  i++)

    for(int j=1;  j<=n;  j++)

     课后习题

算法
  1.什么是算法?怎样描述算法?怎样衡量算法的性能?
   2.确定下列算法中语句的执行次数,并给出算法的时间复杂度。
  intn=10,cos⁡ωt=0;
  for(int i=1;i<=n;i++)
  for(int j=1;j<=i;j++)
  for(int k=1;k<=j;k++)
  count++;

  Java语言面向对象的基本概念习题
     Java语言如何声明一个类?有哪些封装类的措施?能否重载运算符?怎样输出一个实例?


     这一个类如果没有声明构造方法,能否创建实例?为什么?

     一个类如果没有声明析构方法,能否析构实例?为什么?

     怎样比较一个类的两个实例相等及大小?

     那一个类能够继承其父类的哪些成员?能够继承父类的构造方法、析构方法吗?如果子类。不需要从父类继承来的成员,怎么办?能够删除它们吗?
         

    子类实例与其父类实例是什么关系?子类实例能够调用父类声明的方法吗?如果子类声明的方法与父类声明方法同名,到底执行哪一个?

 

    答案于下次随笔发出后更新

2021-09-25

posted @ 2021-09-25 10:52  翀翀翀  阅读(143)  评论(0)    收藏  举报