数据结构---绪章
数据结构与算法(本文选自数据结构与算法(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) //i按2的幂(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

                
            
        
浙公网安备 33010602011771号