Princeton-Algorithm-Stack & Queu

2016-10-26  本文已影响0人  kevinscake

该文章为Princeton-Algorithms Part I读书笔记,相关视频在此。

1. 三个概念Client,Implementation,Interface

Client, Implementation & Interface

Client : 是一些程序(或应用),它们使用了在接口中定义的那些操作。
Implementation:是一些代码。它们真正对对接口进行实现。
Interface:是一种描述。描述了该接口应该包含的数据以及操作。

2. Stack

2.1 API接口

Stack API

2.2 LinkedList实现

维持一个始终指向first node的指针

pop push

2.3 Array实现

在array的最后push,也在array的最后pop

stack的array实现

underflow & overflow:array的IndexOutOfBound
->解决办法:resize array
Loitering: 当pop一个对象时,实际上我们只是将指针N前移,而对象并没有正真地在array中"被pop掉",还被array的指针所指。
->解决办法: 将array的对应指针设为null,因此那个无用的对象可以被garbage collector回收。

2.4 LinkedList实现与Array实现对比

对比

LinkedList:每次操作的最坏O(1)。但是也要花额外的时间和空间维护LinkedList。
Resizing-Array:操作平均下来才O(1)。但是对一系列的操作来说,总体的耗时确可以更低。

3. Queue

3.1 API接口

queue API

3.2 LinkedList实现

维护两个指针,一个first,另一个last

3.3 Resizing-Array 实现

resizing array实现

4. Iteration

4.1 Iterator

Iterator

4.2 Stack Iterator LinkedList 实现

Stack Iterator LinkedList 实现

4.3 Stack Iterator Array 实现

Stack Iterator Array 实现

4. Bag

Adding items to a collection and iterating (when order doesn't matter).

4.1 API接口

Bag API

5. Stack 和 Queue的应用

5.1 算术表达式评估Arithmetic expression evaluation

上一篇 下一篇

猜你喜欢

热点阅读