
每日数据结构
文章平均质量分 60
honbaa
这个作者很懒,什么都没留下…
展开
-
重新考虑容器的存储特性:线序,后进先出,先进先出,无序集合
容器除了保存对象之外,还有什么特点呢? 这些特点需要和一些使用场景有关系,让我想起下面的几个场景:关心顺序: 我第一个放的元素应该在第一个位置,第二个放的元素在第二个位置等等,比如学生的排名情况。第一个元素就是第1名。这种场景我使用的是“列表”容器。列表具有按线序存储的特性。 从一个罐子里取钢珠:第一个放的钢珠最后一个取。这种场景使用的“栈”容器。栈具有后进先出原创 2015-11-02 22:39:19 · 955 阅读 · 0 评论 -
树,二叉树
树的前言:头一次在树上面带上“容器”的帽子。之所以如此,我觉得树也是存储数据的一种方法,而这种方法与直线型的存储方式不同。数据使用树形的方式存储,从一个点向下不断的延伸和扩散。一对多的关系。树里面的元素可以称之为节点,节点之间(通常)使用链式的方法连接而少用数组了。除了将树看成是一种可以容纳元素的容器,也应该看到树也是一种数据类型。这种类型也应该有操作,有成员。树不是直线,它比原创 2015-11-02 20:49:24 · 347 阅读 · 0 评论 -
队列小结
这里考虑的是最简单的队列操作。但是其他的复杂操作都是基于这些的。正所谓不积跬步无以至千里O(∩_∩)O~原创 2015-11-01 20:51:17 · 362 阅读 · 0 评论 -
LinkedQueue链式队列方法的实现
使用链的方式存储节点,而不是使用数组了。 操作还是接口中定义的那些了。在链式的存储方式下,分写类的成员和方法的实现。package honbaa_queue; import java.util.Iterator; public class LinkedQueue implements Queue { //仍然先定义节点类型 private原创 2015-11-01 20:42:30 · 668 阅读 · 0 评论 -
TestQueue测试类
package honbaa_queue;import static org.junit.Assert.fail;import honbaa_stack.Person;import org.junit.Before;import org.junit.Test;public class TestQueue {Queue q ;@Beforepu原创 2015-11-01 17:56:57 · 678 阅读 · 0 评论 -
ArrayQueue实现
ArrayQueue的实现package honbaa_queue; import java.util.Arrays;import java.util.Iterator; public class ArrayQueue implements Queue,Iterable{ private T[]container; private in原创 2015-11-01 17:55:34 · 857 阅读 · 0 评论 -
队列:定义接口
队列:定义接口 队列是一种线性结构。它和栈类似,在队列这个结构上的操作是特别的,所以这样的容器才能称作是队列。 它有2个特别的操作入队,出队。 入队限制插入操作只能在队尾:这个是特殊的。出队限制删除操作只能在对头:这个是特殊的。 在时间上看,先入队的先出队,后入队的后出队。类似于排队打饭。 这种特殊的操作很符合先来先到的特色,在社会中不要插队,所谓早原创 2015-11-01 17:01:06 · 1344 阅读 · 0 评论 -
栈的小结
这种容器和列表很相似。只是栈这种容器,操作的限制更多。比如只能入栈(从栈顶插入元素),删除的时候只能从栈顶删除。这种后进先出的特点可以应用在很多应用中!(这句可以忽略)。从时间看,栈能够保存历史信息,然后最新的先出战。比如浏览器的网页回收站按钮。点一下,恢复的刚刚删除的网页,这个网页就出战了,再点一下,就再会恢复最后第2删的网页。如果现在又删除网页了,那么这个最新的原创 2015-10-30 21:49:45 · 451 阅读 · 0 评论 -
LinkedStack各个方法的实现
@Override public void push(T element) { //没有满这个问题,直接入住 //首先做一个新的节点。把对象放进去 Node node = new Node(); node.data = element; node.next = null;原创 2015-10-30 17:51:38 · 586 阅读 · 0 评论 -
LinkedStack的实现:类型和成员
类型涉及到了节点的定义。与前面提到的一样哦。 private class Node{ private Tdata;//数据 privateNodenext; //指向后面的节点 } 继续分享LinkedStack的成员 在脑子里想一想,一个简单的栈,为了支持那些操作需要什:栈顶(和数组不同,它是引用类型不能直原创 2015-10-30 17:50:29 · 494 阅读 · 0 评论 -
ArrayStack成员和各个方法实现
ArrayStack成员和各个方法实现有了ArrayList的实现,实现ArrayStack好多了。 public void push(Telement); 需要数组 T[],容量,增量,栈顶 public T pop(); 需要数组 T[] public T peek();原创 2015-10-29 16:42:18 · 1716 阅读 · 0 评论 -
Linkedlist中Update和search的实现
首先找到第i个元素,然后改变它的引用即可。 @Override public void update(inti, T dest) { //经过前面的说明,i从1开始 if(i<1 ||i>size) try { throw new Exception(i +"iserror");原创 2015-10-29 16:00:07 · 492 阅读 · 0 评论 -
栈:接口定义与Person类
这次就先写公共的代码 package honbaa_stack; import java.util.Iterator; public interface StackADT{ public void push(T element); public T pop(); public T peek(); public bool原创 2015-10-28 20:58:23 · 498 阅读 · 0 评论 -
测试代码重用
其实,ArrayList和LinkedList只是List的不同实现方式。测试List功能的时候要屏蔽具体实现。在测试代码中,如果要测试ArryList,那么就将实现类改为ArrayList,LinkedList毅然。 测试用例对所有实现List的类都应该是通用的。 重新建立一个测试用例文件:TestList。它的内容为,除了new 具体类这一行根据具体实现不同,测试用例完全相原创 2015-10-28 20:48:04 · 449 阅读 · 0 评论 -
LinkedList的delete方法
下面是LinkedList的detele实现,边编程边分析 @Override public void delete(inti) { //这个方法实现思路其实拍拍脑袋就能想出来了。 //经过前面的说明,i从1开始 if(i<1 ||i>size) try { thro原创 2015-10-28 20:47:00 · 767 阅读 · 0 评论 -
List中update,search,delete方法的修正
问题的方向来源于LinkedList中这3个方法的实现,如果将i看成是下标,,,就悲剧了。因为链式存储里面没有下标的概念。尽管jdk中的实现,将List从0开始。但是,把下标的概念引入List中,只能是将第一个元素看成是第0个。然而我总觉得怪怪的,所以就跑开下标的概念。就是用第几个元素的概念。自己写代码怎么定义都行O(∩_∩)O哈!这3个方法的定义在List中是这样原创 2015-10-23 11:19:22 · 2711 阅读 · 0 评论 -
iterator方法,toString方法实现与add方法的测试
3.iterator方法。跟上个ArrayList类似,为了更方便测试。这个实现所有人都知道了哈。 (1) 创建一个Interator的类 private class LinkedListIteratorT> implementsIterator{ Node curr = head;//注意这一行不是最终版。向下看 @Overrid原创 2015-10-22 16:51:20 · 976 阅读 · 0 评论 -
节点定义,成员分析,构造方法和add方法实现
怎么添加成员呢? 链式结构的节点类型还没有呢。假设是Node。那么LinkList里面需要一个头节点,其他的先不管。 这个Node我可以将它设置为一个内部类。它很简单,所有人都知道。private class Node{ private Tdata; private Nodenext; public T原创 2015-10-22 16:46:43 · 553 阅读 · 0 评论 -
对列表的链式实现-初始定义
使用链式方法实现列表 经过上面2个大部分:列表定义和ArrayList实现的过程,很自然的知道链式实现的思路了 定义列表就不用了,因为已经定义过 了。现在的目标是使用一个新的类实现列表的这些功能。使用LinkedList表示吧。 链式结构? 它是一种动态的存储机制,什么使用使用,什么时候分配。就像火车一样,从车头开始,一节一节的加,也可以随便取出其中的一节删原创 2015-10-22 16:41:42 · 501 阅读 · 0 评论 -
列表小结
List容器小结ArrayList是List的数组实现方法。在定义操作的时候,没有定义那么多的操作。但是,如果要增加操作,整个思路应该是与这些方法的思考模式类似。比如防御编程,定义接口,数据支持操作等。原创 2015-10-20 14:33:03 · 370 阅读 · 0 评论 -
Search,size,isEmpty
Search,size,isEmpty这3个方法很有用,实现确实最简单啊^_^看定义:public T search(inti); public int size(); public boolean isEmpty();这3个方法是在太简单。不用分析了。直接写代码: @Override public T search(int原创 2015-10-20 14:25:57 · 382 阅读 · 0 评论 -
update数组实现
更新先看定义:public void update(inti, T dest); 它的意思每个人都知道。使用dest对象替换i位置的对象。 这个操作再简单不过了,一个赋值就OK。 编写代码边分析:@Override public void update(inti, T dest) { //还是先判断异常情况原创 2015-10-20 14:02:30 · 1701 阅读 · 0 评论 -
delete数组实现
更正错误: List接口中,search方法的目的是返回对象,所以,返回类型应该是T而不应该是voidPublicvoid search(inti);改成 PublicT search(inti); 首先是update,要看方法是如何定义的:public voiddelete(int i); 我们自己很明白为什么这么定义。删除位于下标i的对象。原创 2015-10-20 12:10:31 · 930 阅读 · 0 评论 -
add,iterator,toString三个方法实现
对于add操作,我想到了下面的特殊情况:如果数组满了 扩大数组空间…. 下面写代码,边写边分析首先是add@Overridepublic void add(T obj) {//首先要想特殊情况:如果数组容量不够怎么办?扩展容量呗if(capacity==size)expandCapacity();//这个方法先写在这里原创 2015-10-19 19:41:16 · 607 阅读 · 0 评论 -
列表数组实现-成员分析
成员:明显需要一个数组就可以了。但是为了能够方便的获取容器的状态,比如目前容器里面有多少个对象啊,这些状态信息为实现操作提供支持。所以,要针对每一个操作思考一下,需要什么数据来支持我的操作呢? 操作 需要的数据或者结构Add 数组,数组初始大小,当数组容量不够时分配的增量Delete 数组Update原创 2015-10-19 14:36:32 · 359 阅读 · 0 评论 -
列表
线性表是一种最简单的容器。直观上是一个包含多个元素的序列。元素之间的顺序是很重要的。如一个包含10个整数的线性表:a=。 存储方式当然也就是通常的2种:数组和链表。 数组要维护一下空间,即如果空间不够了要扩大容量。优点是存取速度快,a[0]立马就返回a[0],a[10]立马返回a[10]。但是插入和修改就要移动元素了,而且是一个一个的移动。比如在6后面插入个100,那么7到原创 2015-10-18 10:01:53 · 383 阅读 · 0 评论 -
写这些东西目的在于温故而知新
写这些东西目的在于温故而知新。语言使用java。为了能够将编写的代码使用复用,加入泛型,容器应该能够容纳各种对象才行。 数据结构其实发生的地方就是保存数据的时候。什么样的数据怎么存的问题。给这个问题简单的戴个帽子就是“容器”。意思是装数据的容器。因为我们在开发的时候总是要想我怎么装这些或者那些数据。比如一个班级所有学生的数据,用什么容器装呢。 容器对应于生活中很熟悉不过了,原创 2015-10-18 09:59:53 · 386 阅读 · 0 评论 -
开始
还有几个月就要毕业了。在学校里面的时间是最好的学习时间了。到了公司,就没有这么多的时间学习了。不知道为什么,心里总是觉得数据结构和算法是软肋,而且很重要。觉得好的学习时间就剩下这么多了。希望自己能每天温习一下数据结构的知识。原创 2015-10-16 11:20:10 · 305 阅读 · 0 评论