数据结构

什么是数据结构

	就是计算机组织、存储数据的方式
	堆、栈、数组、链表、树、队列、图、散列表

数据结构定义:
数据结构是计算机对数据存储的一种安排.

理解1:对数据安排是可以有多种,所以数据结构是多样的
理解2:特定数据结构组成的数据,它应该有一些规律。

为啥要自定义容器

	以前存储数据的方式不能满足现在的需求	
		变量	:类型必须匹配 值能是一个值
		数组:类型,长度(固定)
【案例】:基于链表的容器类实现
	1.定义一个容器类
		持有一个节点对象
			用来判断是否是第一个节点
	2.创建一个节点类[a.持有 存放的数据   b.下一个节点的地址]
	3.针对容器提供一些方法
		a.每次添加的时候都需要找到 next 为空的节点
		覆写 toString 字符串的拼接
【案例】:基于数组的容器
	1.定义一个容器类,
	2.可以存放指定类型,指定长度
		类里面持有这个类型的一个数组
	3.提供添加方法	
		动态往容器中添加数据
	4.覆写toString
		System.arrayCopy() 数组拷贝的方法
	5.提供其他的数据维护的方法

数据存储方式
思考:既然数据结构是用来存数据,那我们先来回顾一下我们用过哪些存储数据方式?

2.1.2.1 变量存储
(1): 变量(变量声明格式: 数据类型 变量名)
示例:int age ;
变量作用:可以存储一个数据值;
示意图表示:

变量操作:赋值(直接使用赋值符号),取值(直接使用变量名,参与运算)

使用变量的注意事项:

变量特点:只能存放一个值.
注意:
值和类型匹配问题:数据类型限定了变量可以存储的数据类型
成员变量和局部变量问题:在使用局部变量之前,必须赋值
成员变量有默认值. 但是默认值都没有多大意义,在做项目的时候,给它赋一些值.

问题:如果现在需要把所有人的年龄存放起来,是不是需要很多变量,这样是不是很不方便?
这个时候,可以使用数组;

2.1.2.2 数组存储
(2)数组的声明格式: 数组中元素的类型[] 数组名
比如说 int[] ages = new int[3]

示意图表示:

数组的作用:可以存储多个数据;
数组操作:存值 ages[0] = 10,取值 ages[0]
特点:长度固定,只能够是存储同种类型;

比如60人 ,新建一个长度为60的数组,但是过段时间,又增加几个人,那60是不满足的要求,需要扩大,那一开始新建200个长度的数组,好不好?这样也不好,如果有201人,也不够?

所以我们希望如果刚好够,并且能够自动扩展.那需要自己来设计这样的容器;

2.1.2.3 自定义类存储
(3)自定义容器类

希望 ① 可以存储任意多个元素;
     ② 可以存储任意类型的数据;

分析:--------->
在Java中,万物皆对象,可以设置一个类表示上面的容器,那怎么设计?
提示:--------->
比如: Integer类 里面有个int value 变量存储值,
String类 里面有个 char[] value 字符数组变量存储值.
如下图所示:

步骤:--------->
①自定义一个容器类,比如(IntArray类);
②先做到可以存储多个int值,内部使用int数组;
③类里面 创建了一个int数组,当int数组满足之后,在创建一个新的数组;并且把老的数组值拷贝到新的数组里面(实现自动扩容);

自定义类已经设计好了,那用户在操作的时候,怎么使用?也就是怎么存值,怎么取值?

方案一:把里面的数组设置为private,提供get,set方法;通过get就可以取得数组的值;
方案二:在类里面提供一个方法,比如add,调用一次,就往里面添加一个值;

哪种方式好,第一个种好吗,用户在调用的时候,通过get方法,取到了一个数组,在设置的时候,又需要传一个数组. 在操作的时候已经暴露出数组; 但是用户在操作的时候,并不想知道这些具体的实现;

第二种方式,直接提供方法,封装性更强更好;也就是存的时候,提供了一个add方法,调用一次add方法就向容器里面添加一个元素;

2.2 自定义容器实现
上面已经说明可以自定义一个容器类来存储值,具体怎么实现?

实现步骤:
① 定义一个自定义容器类 IntArray
② 创建一个存放数据的数组 比如 int[] data= new int[10];
③ 定义一个添加方法 add ,调用一次给当前容器对象添加一个元素
④ 创建自定义容器类对象,调用add方法,添加元素

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值