目录
1、链表队列算法实现
该算法也符合最优设计目标:
- 它可以处理任何类型的数据;
- 所需的空间总是和集合的大小成正比;
- 操作所需时间总是和集合大小无关。
public class LinkedQueue<T> {
private Node first;// 指向最早添加的结点的链接
private Node last;// 指向最近添加的结点的链接
private int N = 0;// 集合的数量
// 结点
class Node {
T item;
Node next;
}
/**
* 将元素放入队尾
*/
public void enqueue(T t) {
Node oldLast = last;
last = new Node();
last.item = t;
last.next=null;
if (isEmpty()){
first=last;
}else {
oldLast.next =last;
}
N++;
}
/**
* 将元素从队头删除
*/
public T dequeue() {
T item = first.item;
first = first.next;
N--;
if (isEmpty())
last = null;
return item;
}
public boolean isEmpty() { return N == 0; }
public int size() {
return N;
}
}
2、队列的定义
队列是只允许在一段进行插入操作,在另一端进行删除操作的线性表。
3、队列在Android中
队列在Android中的实现为Queue,代表性的队列实现类为LinkedList。
4、链表队列(Kotlin)
class LinkedQueue<T> {
private var first // 指向最早添加的结点的链接
: Node? = null
private var last // 指向最近添加的结点的链接
: Node? = null
private var N = 0 // 集合的数量
// 结点
internal inner class Node {
var item: T? = null
var next: Node? = null
}
/**
* 将元素放入队尾
*/
fun enqueue(t: T) {
val oldLast = last
last = Node()
last!!.item = t
last!!.next = null
if (isEmpty()) {
first = last
} else {
oldLast!!.next = last
}
N++
}
/**
* 将元素从队头删除
*/
fun dequeue(): T? {
val item: T? = first?.item
first = first!!.next
N--
if (isEmpty()) last = null
return item
}
fun isEmpty(): Boolean {
return N == 0
}
fun size(): Int {
return N
}
}
本文章的大部门内容来之于由Robert Sedgewick和Kevin Wayne著的《算法》第四版书籍中,本文章的目的主要是为了记录自己的学习笔记和技术分享。