数据结构 一 :栈

一。俗话说:软件就是数据结构+算法。不言而喻,数据结构之重要性。闲着在家,发扬‘实践是第一真理’的伟大理论,试着自己实现一些经典的数据结构,因为功力有限,只能凭着浅显的理解,硬性的编码,没有多加考虑如分布式,多线程或效率与空间消耗。

二。此次编码,只为基础学习提供一个过程,离真正掌握数据结构差之甚远,网络上流行各种‘帝’,如表情帝,状态帝等,这次编码可以美其名曰:实践帝。以资鼓励。

三。此次实践计划涉及到表(List),栈(Stack),队列(Queue),树(Tree),散列(Hash)等。方式为:先自行试着实现其数据结构,再对照其java源码,以寻找不足与问题。

四。今天先实现栈,栈的经典定义为‘先进后出’,即‘first in last out’,所以基本操作为入栈即push,出栈即pop。废话少说,直接贴代码。


图片
图片

五。考虑的问题:

    (1)考虑到现在的java源码一般都会考虑到泛型的问题,所以在此我也使用了泛型,即<E>,可以更好的对加入到栈的元素进行检查。

    (2)其实代码基本没有难度,只是需要稍微注意索引即index的大小,因为当元素数量大于容量时会发生溢出,所以checkLength方法为本代码的关键,即在达到容量大小时,就让容量继续增加10.

    (3)在此没有考虑多线程的情况,即在push或pop时,原则上应该使用‘synchronized’关键字,即所谓的同步。

    (4)在此亦没有考虑向栈加入null元素时的情况。

六。java源码。直接贴代码:

图片
图片

七。问题:

    (1)sun的Stack是继承自Vector,我然后看了一下Vector,发现Vector又是继承自AbstractList<E>并且实现了 List<E>, RandomAccess, Cloneable, java.io.Serializable,可见sun的源码思维严谨,充分考虑的继承与实现等面向对象的思想。

    (2)sun的Stack使用了‘synchronized ’ 关键字,所以考虑到了同步问题,同步问题在操作系统中是一个经典问题,涉及到了PV操作,信号量问题以及经典的‘生产者-消费者’问题,之前淘宝的‘秒杀门’也是由于同步问题考虑不够完善造成了一次还算轰动的事件,说到淘宝,其海量的数据量注定了其在各种大型架构网站高负载时的丰富经验,可以说淘宝牛人确实不在少数。不过我在使用淘宝时,感觉其在诸首页渲染时速度还是不够快,不过可能确实是其加载数据量太过大又或者是我电脑网速不够快,在物品的信息页面,有一个状态条,每当一开始总会显示其正在加载库存数量,我猜测其是一个nio的问题,也可能是淘宝已经对各种数据进行了分库,把各种数据分放在不同的服务器,以响应频繁的访问量,猜测,只是猜测,因为对于这种涉及nio和网站架构问题我还是菜鸟中的菜鸟。

    不说了,已经偏题了。回到‘synchronized ’,不管sun是使用PV实现还是信号量实现,总之加上这么一个关键字,他就可以同步了,这个问题放在以后再继续学习。

八。总结:

    对于数据结构这种基础性的科目,自己确实花时间太少,而其重要性,如在游戏开发中的各种算法等,而很大程度上数据结构和算法是不分家的,所以数据结构可能暂时无法知道其作用,但相信这是一种内功,为以后的更进一步。总之一句话:学总比不学好。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值