数据结构与算法
dbjxs
这个作者很懒,什么都没留下…
展开
-
大话数据结构(三)——单向循环链表的java实现
首先,我们来说说什么是单向循环链表:单向循环链表就是单链表的另外一种表现形式,其结构特点是最后一个指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环,就像将一根铁链子首尾连接形成一个铁链环一样。在单链表中,由于每个结点只存储了向后的指针,到了尾标志就停止了向后链的操作,这样当中的某一结点就无法找到他的前驱结点了,即无法回到之前的结点。这就体现出了单链循环链表的原创 2017-05-22 22:42:24 · 1621 阅读 · 1 评论 -
大话数据结构(四)——双向链表的java实现
在实现了单向链表后,我们在使用单向链表中会发现一个问题:在单向链表中查找某一个结点的下一个结点的时间复杂度是O(1),但是查找这个结点的上一个结点的时候,时间复杂度的最大值就变成了O(n),因为在查找这个指定结点的上一个结点时又需要从头开始遍历。 那么该如何解决这个困难呢?我们可以在单链表的每个结点中,再设置一个指向前驱结点的指针域,这就构成了双向链表。在双向链表中含有两个指针域,一个指原创 2017-05-23 16:47:54 · 504 阅读 · 0 评论 -
大话数据结构(五)——栈的两种java实现方式
在我们生活当中经常会看到这样一种操作,比如我们往一个空羽毛球盒子里面放羽毛球(个人比较喜欢羽毛球,嘿嘿),放完后再将羽毛球一个一个取出的时候会发现,最先放进去的羽毛球往往最后才取出来,相反,最后放入的羽毛球往往最先取出。这个例子形象的说明了栈的操作方式,下面我们来看看什么是栈,以及栈的一些操作。 那么什么是栈呢?栈就是限定在表尾进行插入和删除操作的线性表。我们将允许插入和删除的一端称为栈原创 2017-05-24 12:44:52 · 752 阅读 · 0 评论 -
大话数据结构(六)——队列的两种java实现方式
记得说桟的时候用了羽毛球的例子:羽毛球盒只有一个端口,取出和放入都得从这个口进行,并且放入和取出的原则遵循“后入先出”的原则。而队列与桟的原则相反,桟的原理就好比这个羽毛球盒子是两头开的,放入的时候从一个口放入,而取出的时候从另一端取出,这样就使得先放入的先取出,后放入的后取出。这种先进先出的数据结构就是队列。 说的官方一点,队列就是只允许在一端进行插入操作,而在另一端进行删除操作的线性原创 2017-05-27 18:46:10 · 1171 阅读 · 0 评论 -
大话数据结构(二)——线性表链式存储结构(单链表)的java实现
线性表的链式存储结构的特点是用一组任意的存储单元存储线性表中的数据元素,这组存储单元可以是连续的,也可以是不连续的。这也就意味着这些数据可以存在内存未被占用的任意位置。在链式存储结构中由于存在以上特性,所以它除了要存数据元素信息外,还要存储它的后继元素的存储地址。 因此,为了表示每个数据元素a[i]与其直接后继数据元素a[i+1]之间的逻辑,对数据元素a[i]来说,除了存储其本身的信息之原创 2017-05-25 09:55:46 · 579 阅读 · 0 评论 -
大话数据结构(一)——线性表顺序存储结构的java实现
在看《大话数据结构》的时候,里面诙谐的语言和讲解吸引了我,但是这本书是用C来实现的,但是作为一个手撸java的人就想着用java来实现一下这些数据结构,于是就有了这些大话数据结构之java实现。哈哈,感觉这样会让自己的理解加深不少。 好了,不多说啦,今天是实现线性表顺序存储结构,首先我们来看看什么是线性表。 每次去食堂吃饭就会看到排的一条条的长队,其实每一条队伍就是一个线性表,原创 2017-05-25 09:19:32 · 999 阅读 · 2 评论 -
大话数据结构(七)——二叉树创建与遍历(递归、非递归)的java实现
什么是二叉树呢?二叉树是n(n>=0)个结点的有限组合,该集合或者为空集,或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。二叉树的具体结构如下图所示: 二叉树的遍历这里介绍三种方法:前序遍历,中序遍历和后序遍历。前序遍历:前序遍历的规则是若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再遍历右子树。若前序遍原创 2017-05-30 11:05:27 · 484 阅读 · 2 评论