数据结构与算法分析(Java语言描述)学习--第三天

第3章 表、栈和队列

抽象数据类型

抽象数据类型(ADT)是带有一组操作的一些对象的集合。

表ADT

表的简单数组实现

简单链表

每一个节点均含有表元素和到包含该元素后继元的节点的next链。最后一个单元的next链引用null。
remove方法通过修改一个next引用实现。
insert方法需要new从系统中取得一个新节点。
从链表中插入或删除不需要移动很多项。
双链表:每一个节点持有一个指向它在表中的前驱节点的链。

Java Collections API中的表

Collection接口

位于java.util包中。
size返回集合中的项数。
扩展了Iterable接口。

Iterator接口

实现Iterable接口的集合必须提供一个iterator的方法。
next给出集合的下一项,hasNext用来告诉是否存在下一项。

List接口、ArrayList类和LinkedList类

  • List接口位于java.util包,继承了Collection接口。get和set可以访问或改变位置索引给定的表中指定位置上的项。
  • ArrayList提供List的一种可增长数组的实现。优点在于对于get和set的调用花费常数时间,缺点在于新项的插入和现有项的删除代价昂贵。
  • LinkedList提供List的双链表实现。优点在于新项的插入和现有项的删除均开销很小。提供方法addFirst和removeFirst、addLast和removeLast、getFirst和getLast等操作。缺点是不容易作索引,对get的调用是昂贵的。
  • ArrayList和LinkedList对add的调用如果都是在末端进行那么花费的是常数时间,在前端运行则对于LinkedList它的运行时间是O(N),但是对于ArrayList运行时间是O(N2),因为前端添加是O(N)操作。循环使用get进行求和操作,ArrayList运行时间是O(N),LinkedList是O(N^2),因为对get的调用是O(N)操作。
  • 对搜索而言,两者都是低效的。

remove方法对LinkedList类的使用

  • 删除表中的偶数:使用LinkedList,迭代器的remove方法的调用。因为迭代器位于需要被删除的节点。
public static void removeEven(List<Integer> lst)
{
	Iterator<Integer> itr = lst.iterator();
	while(itr.hasNext())
		if(itr.next() % 2 == 0)
			itr.remove();
}

关于ListIterator接口

扩展了List的Iterator功能。
previous和hasPrevious使得表从后向前的遍历得以完成。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值