有哪些数据结构
有线性表,有二叉树,有图 线性表包括(数组,链表,栈....) 二叉树(红黑树,B树....) 图(....)
动态数组
今天主要学习了自定义的动态数组,实现了add,remove,contain,clear,set,get,indexOf等一系列方法 自定义数组应该提供些什么内容? 需要提供的成员变量 1.长度size 2.需要维护一个数组对象elements,存放元素,暂定为int类型 还需要其他的成员变量吗? 不需要了吧....需要再说 需要提供的方法
-
初始化方法 1.根据长度初始化capacity 2.空初始化
-
比较重要的是add的实现,需要动态扩容 ,是通过重新开辟一块比原先要大的内存空间,然后将变量指向这个新开辟的内存空间,
-
其次比较重要的是插值和删除角标对应的元素,需要注意删除的顺序问题,以及对size进行增减。代码主要是通过java语言实现。不过也可以尝试使用oc或者swift自己实现一个类似的动态数组。
-
还学习了java的泛型,和oc很像
补充
昨天晚上回去按照老师讲的手动实现动态数组,然后发现了一个在听课的时候没有意识到的点.
在实现remove的时候,是通过将后面的向移除的index处移动,这就导致了一个问题,原先的最后一位其实还在,
clear的实现也是只将size置为0,没有对数组的元素进行任何处理,也就是说如果能拿到elements,那么仍旧可以访问之前的数据,而这是有问题的.当然,在涉及的时候需要将elements设置为私有,外部无法访问,size也需要私有,因为内部操作很多地方都依赖了size.
问题就在这,从外面看,没有任何问题,但是从内部看,数组元素根本没有删除
那么解决办法只能是置零.
Dog[] arr = new Dog[10];
System.out.print(arr[0]);//null
int[] arr1 = new int[10];
System.out.print(arr1[0]);//0
System.out.print(arr1[9]);//0
打印发现其实系统的也是初始为0