栈和队列之LinekedList(双端队列)
来源:互联网 发布:编程软件图标 编辑:程序博客网 时间:2024/05/02 00:19
介绍:
(deque,全名double-ended queue)是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。
双端队列是限定插入和删除操作在表的两端进行的线性表。这两端分别称做端点1和端点2(如下图(a)所示)。也可像栈一样,可以用一个铁道转轨网络来比喻双端队列,如下图(b)所示。在实际使用中,还可以有输出受限的双端队列(即一个端点允许插入和删除,另一个端点只允许插入的双端队列)和输入受限的双端队列(即一个端点允许插入和删除,另一个端点只允许删除的双端队列)。而如果限定双端队列从某个端点插入的元素只能从该端点删除,则该双端队列就蜕变为两个栈底相邻的栈了。
LinkedList
LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用.LinkedList的构造函数如下
1. public LinkedList(): ——生成空的链表
2. public LinkedList(Collection col): 复制构造函数
1、获取链表的第一个和最后一个元素
import java.util.LinkedList; public class LinkedListTest{ public static void main(String[] args) { LinkedList<String> lList = new LinkedList<String>(); lList.add("1"); lList.add("2"); lList.add("3"); lList.add("4"); lList.add("5"); System.out.println("链表的第一个元素是 : " + lList.getFirst()); System.out.println("链表最后一个元素是 : " + lList.getLast()); } }2、获取链表元素
for (String str: lList) { System.out.println(str); }
3、从链表生成子表
List subl = lList.subList(1, 4); System.out.println(subl); lst.remove(2); System.out.println(lst); System.out.println(lList);4、添加元素:添加单个元素
如果不指定索引的话,元素将被添加到链表的最后.
public boolean add(Object element)
public boolean add(int index, Object element)
也可以把链表当初栈或者队列来处理:
public boolean addFirst(Object element)
public boolean addLast(Object element)
addLast()方法和不带索引的add()方法实现的效果一样.
import java.util.LinkedList; public class LinkedListTest{ public static void main(String[] a) { LinkedList list = new LinkedList(); list.add("A"); list.add("B"); list.add("C"); list.add("D"); list.addFirst("X"); list.addLast("Z"); System.out.println(list); } }5、删除元素
public Object removeFirst() public Object removeLast() import java.util.LinkedList; public class MainClass { public static void main(String[] a) { LinkedList list = new LinkedList(); list.add("A"); list.add("B"); list.add("C"); list.add("D"); list.removeFirst(); list.removeLast(); System.out.println(list); } }6、使用链表实现栈效果
import java.util.LinkedList; public class MainClass { public static void main(String[] args) { StackL stack = new StackL(); for (int i = 0; i < 10; i++) stack.push(i); System.out.println(stack.top()); System.out.println(stack.top()); System.out.println(stack.pop()); System.out.println(stack.pop()); System.out.println(stack.pop()); } } class StackL { private LinkedList list = new LinkedList(); public void push(Object v) { list.addFirst(v); } public Object top() { return list.getFirst(); } public Object pop() { return list.removeFirst(); } }7、使用链表来实现队列效果
import java.util.LinkedList; public class MainClass { public static void main(String[] args) { Queue queue = new Queue(); for (int i = 0; i < 10; i++) queue.put(Integer.toString(i)); while (!queue.isEmpty()) System.out.println(queue.get()); } } class Queue { private LinkedList list = new LinkedList(); public void put(Object v) { list.addFirst(v); } public Object get() { return list.removeLast(); } public boolean isEmpty() { return list.isEmpty(); } }
8、实现栈
import java.util.Collections; import java.util.LinkedList; public class Main { public static void main(String[] argv) throws Exception { LinkedList stack = new LinkedList(); Object object = ""; stack.addFirst(object); Object o = stack.getFirst(); stack = (LinkedList) Collections.synchronizedList(stack); } }9 实现队列
import java.util.LinkedList; public class Main { public static void main(String[] argv) throws Exception { LinkedList queue = new LinkedList(); Object object = ""; // Add to end of queue queue.add(object); // Get head of queue Object o = queue.removeFirst(); } }
0 0
- 栈和队列之LinekedList(双端队列)
- [zz]栈和队列,双端队列
- 栈和队列、双端队列
- “栈和队列”之队列--基本数据结构
- 栈,队列,双端队列
- 栈和队列--队列
- 【栈和队列】队列
- java容器之队列、双端队列、栈
- 栈,队列和双端队列的操作
- 数据结构之栈和队列
- 数据结构之栈和队列
- 数据结构之栈和队列
- 数据结构之栈和队列
- 总结之栈和队列
- 数据结构之栈和队列
- 数据结构之栈和队列
- 数据结构之栈和队列
- 数据结构之栈和队列
- 动态sql例子
- What is 'lr_policy' in caffe?
- Android 反射接口Interface应用
- JavaScript 判断 DOM 何时加载完毕
- cocos2dx 源码分析之 CCPoolManager
- 栈和队列之LinekedList(双端队列)
- nltk function
- Mecv中遇见的ie兼容问题
- UIResponder
- Android编码规范
- vimrc
- 关于win10 64位安装 XP 32位注意事项
- 机器学习常见名词
- 由hdu2110总结的背包问题