数据结构
1.基本概念
1.数据(data):能够被计算机识别,存储,加工和处理的描述客观世界的数字等符号的总称.
2.数据项(data Item):数据不可分割的最小标识单位,是数据元素的组成部分,也可称为字段和域.
如"书名""价格""作者"等都可以作为一个数据项
3.数据元素(Data Element):是数据的基本单位,又可成为元素,节点,顶点,记录等.是一个数据整体中可以被标识和访问的数据单元.
如"书名""价格""作者"放在一起就是一个数据元素
4.数据对象(Data Object):是性质相同的数据元素的集合,也叫数据元素类.
5.数据结构(Data Structure):是数据元素相互之间存在一种或多种关系的集合
数据结构包含3方面内容:
1.数据的逻辑结构
是指数据元素之间的逻辑关系,有数据元素的集合和定义在集合上的关系组成. 逻辑结构与存储无关,独立于计算机.是从具体问题抽象出来的数学模型.
(1)集合
(2)线性结构
(3)树形结构
(4)图形结构
数据的逻辑结构主要涉及两个方面:数据元素和逻辑关系.逻辑结构的定义为Logica_Structures = (D,R)
2.数据的存储结构
逻辑结构在计算机中的实现叫做存储结构,存储结构依赖即计算机.
(1)顺序存储结构
存放在连续的存储单元,元素的逻辑次序和物理存储次序一致.即在物理位置上相邻的元素,在逻辑上也相邻.
(2)链式存储结构
使用地址分散的存储单元存放数据,逻辑上相邻的元素,物理位置上不一定相邻.数据元素间的逻辑关系通常由附加的指针表示,指针记录前驱元素和后继元素的存储地址.
(3)索引存储结构
增加索引表,索引表由关键字和地址构成.关键字唯一标识一个元素,地址为该数据元素存储地址的首地址.
(4)散列存储结构
也叫哈希存储结构,具体存储地址根据关键字通过哈希函数直接计算出来.
3.数据的操作
创建,增删改查,遍历,销毁
2.算法
1.算法的概念
算法是有穷规则的集合,其规则确定一个解决某一特定类型问题的指令序列,每一条指令表示计算机的一个或多个操作.
特点:
(1)有穷性
(2)确定性
(3)可行性
(4)有输入
(5)有输出
算法建立在数据结构之上. 对数据结构的操作需要使用算法来描述. 算法的设计依赖于数据的逻辑结构,算法的实现依赖于存储结构
2.算法举例
根据用户输入值查找角标
package com.njaccp.hashMap;import java.util.Scanner;/*** My8_12_1** @author 孟晨旭* @version 1.0* @description* @date 2022/8/12 8:30*/public class My8_12_1 {public static void main(String[] args) {// 根据用户输入值,返回角标int [] array = {1,2,32,43,564,312,456,3,32,97};// 请用户输入要查找的值Scanner scanner = new Scanner(System.in);System.out.print("请输入要查的值:");int number = scanner.nextInt();// 遍历数组int n = array.length,i=0;while(i<n&&array[i]!=number){i++;}if(i<n){System.out.println("您要查找的数字对应的角标为:"+i);}else {System.out.println("没能找到您输入的元素");}}}设计算法求两个数的最大公约数
package com.njaccp.hashMap;import java.util.Scanner;/*** My8_12_3*辗转相除法求最大公约数* @author 孟晨旭* @version 1.0* @description* @date 2022/8/12 15:57*/public class My8_12_3 {//public static void main(String[] args) {// 用户输入两个数据Scanner scanner = new Scanner(System.in);System.out.println("请输入两个数:");int number1 = scanner.nextInt();int number2 = scanner.nextInt();// 计算最大公约数的方法My8_12_3 my8_12_3 = new My8_12_3();int i = my8_12_3.maxPublicNumber(number1, number2);System.out.println("最大公约数为:"+i);}private int maxPublicNumber(int number1, int number2) {while (number1%number2!=0){int i = number1%number2;number1 = number2;number2 = i;}return number2;}}3.算法分析
(1)时间复杂度:指算法的执行时间随问题规模的变化而变化的趋势,反映算法执行时间的长短 .
(2)空间复杂度:算法执行时所占用的额外空间随问题规模变化而变化的趋势.
3.泛型方法
1.使用Object表示范型
2.使用Comparable接口表示泛型