栈,队列和背包总结
2017-10-15 11:18
190 查看
1. 栈的实现
(1)栈数据结构
(4)栈迭代器
2. 队列的实现
(1)队列数据结构
3. 背包的实现
(1)背包的数据结构
说明:用链表数据结构实现Bag API只需要将Stack中的push()改名为add(),并去掉pop()的实现即可。
参考文献:
[1] 算法(第4版)
(1)栈数据结构
public class Stack<Item> implements Iterable<Item> { private Node<Item> first; // top of stack private int n; // size of the stack // helper linked list class private static class Node<Item> { private Item item; private Node<Item> next; } ...... }(2)压栈操作
public void push(Item item) { Node<Item> oldfirst = first; first = new Node<Item>(); first.item = item; first.next = oldfirst; n++; }(3)出栈操作
public Item pop() { if (isEmpty()) throw new NoSuchElementException("Stack underflow"); Item item = first.item; // save item to return first = first.next; // delete first node n--; return item; // return the saved item }
(4)栈迭代器
// return an iterator to this stack that iterates through the items in LIFO order. public Iterator<Item> iterator() { return new ListIterator<Item>(first); } // an iterator, doesn't implement remove() since it's optional private class ListIterator<Item> implements Iterator<Item> { private Node<Item> current; public ListIterator(Node<Item> first) { current = first; } public boolean hasNext() { return current != null; } public void remove() { throw new UnsupportedOperationException(); } public Item next() { if (!hasNext()) throw new NoSuchElementException(); Item item = current.item; current = current.next; return item; } }
2. 队列的实现
(1)队列数据结构
public class Queue<Item> implements Iterable<Item> { private Node<Item> first; // beginning of queue private Node<Item> last; // end of queue private int n; // number of elements on queue // helper linked list class private static class Node<Item> { private Item item; private Node<Item> next; } ...... }(2)入队操作
public void enqueue(Item item) { Node<Item> oldlast = last; last = new Node<Item>(); last.item = item; last.next = null; if (isEmpty()) first = last; else oldlast.next = last; n++; }(3)出队操作
public Item dequeue() { if (isEmpty()) throw new NoSuchElementException("Queue underflow"); Item item = first.item; first = first.next; n--; if (isEmpty()) last = null; // to avoid loitering return item; }(4)队列迭代器
public Iterator<Item> iterator() { return new ListIterator<Item>(first); } // an iterator, doesn't implement remove() since it's optional private class ListIterator<Item> implements Iterator<Item> { private Node<Item> current; public ListIterator(Node<Item> first) { current = first; } public boolean hasNext() { return current != null; } public void remove() { throw new UnsupportedOperationException(); } public Item next() { if (!hasNext()) throw new NoSuchElementException(); Item item = current.item; current = current.next; return item; } }
3. 背包的实现
(1)背包的数据结构
public class Bag<Item> implements Iterable<Item> { private Node<Item> first; // beginning of bag private int n; // number of elements in bag // helper linked list class private static class Node<Item> { private Item item; private Node<Item> next; } ...... }(2)入包操作
public void add(Item item) { Node<Item> oldfirst = first; first = new Node<Item>(); first.item = item; first.next = oldfirst; n++; }(3)背包迭代器
public Iterator<Item> iterator() { return new ListIterator<Item>(first); } // an iterator, doesn't implement remove() since it's optional private class ListIterator<Item> implements Iterator<Item> { private Node<Item> current; public ListIterator(Node<Item> first) { current = first; } public boolean hasNext() { return current != null; } public void remove() { throw new UnsupportedOperationException(); } public Item next() { if (!hasNext()) throw new NoSuchElementException(); Item item = current.item; current = current.next; return item; } }
说明:用链表数据结构实现Bag API只需要将Stack中的push()改名为add(),并去掉pop()的实现即可。
参考文献:
[1] 算法(第4版)
相关文章推荐
- [总结] 单调队列优化多重背包学习笔记
- 数据结构与算法总结3_常用的数据结构(背包,栈和队列)
- 学习总结-队列
- 实验4:栈和队列的基本操作实现及其应用——进制转换以及实验总结
- 基础大扫荡——背包,栈,队列,链表一口气全弄懂
- 【背包总结】【输出方案总数】
- C++中的队列(queue)和优先队列(priority_queue)总结
- Java多线程总结之线程安全队列Queue
- Java多线程总结之线程安全队列Queue
- 栈和队列的总结
- 背包总结
- 01背包,完全背包,多重背包的个人总结
- hdu 3810 Magina 5亿的背包,队列优化DP
- x消息队列的总结
- 分支限界法解决装载问题之FIFO队列方式的总结
- leetcode -- 队列总结
- hdu 3810 Magina 队列模拟0-1背包
- 阿里天池中间比赛总结,即消息队列引擎设计
- 算法总结——spfa(使用优先队列的Bellman_Ford算法)
- 0-1背包总结