数据结构初步总结

最近看了一点数据结构,有点初步的理解,如果有问题的地方请大家帮忙改正,不喜勿喷

1.常见的三种数据结构:背包(Bag),队列(Queue)和栈(Stack)
2.背包:背包主要目的是为了收集元素和迭代元素,也可以用来获取元素数量和是否为空,但是一般与顺序无关
3.队列:先进先出:主要是类型就是先进先出,就像买票排队一样
4.栈:也称为下压站:是一种后进先出的类型,举例子就是电子邮箱
其实用栈还可以解决一种复杂算数的运算,例如(1+((2+3)*(4*5)))这种可以将操作数和操作运算符分别压入栈,然后进行运算
1)首先看一个定容栈:FixedCapacityStackOfStrings,这种定容栈的实例变量为一个保存元素的数组,还有一个保存栈中元素数量的整数变量n。但是这种栈只能使用String类型,如果需要double栈就需要重新实现接口,但是有点得不偿失,所以需要引入泛型解决这个问题。
FixedCapacityStack<Item>,当然这个Item我们是不知道什么类型的,但是在java中不允许定义泛型数组,所有a=new Item[cap]是不允许的,我们需要使用的是类型转换a=(Item[])new Object[cap];
eg:为什么不允许创建泛型数组?举个例子,数组中放一个int类型都能通过编译,但是如果你想转变成一个其他类型那么编译会不成功
对象游离:在我们队pop方法进行实现中,被弹出的元素的引用仍然在数组中,但是元素已经成为鼓励的了,没人会再进行访问,但是java垃圾回收器却不知道,这种情况下就叫做对象游离,解决方法是把被弹出数组元素的值设为null
2)下压栈,这种栈能够实现栈的动态调整数组大小
注:说一下定容栈和下压栈的区别,定容栈在api上和stack的api有一部分不相同,但是下压栈主要是实现的stack的api,能够动态的改变数组的大小,创建任意数据类型的栈,并且支持用foreach语句按照先进后出的顺序访问栈元素(个人理解)
5.链表:链表是一种递归的数据结构
eg。private class Node{
Item item;
Node next;
}
Item表示任意的数据类型,next表示对下一个元素的引用
链表一般在表头插入节点,表头删除节点,表尾插入节点比较容易,删除指定的节点和在指定节点前插入一个新节点就比较困难了
5.用链表数据结构实现bag其实只需要将Stack中的push改为add就可以,并且去掉pop方法,也可以用相同的方式实现queue,但是代码需要更多


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值