栈和队列之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);    }  }  
实现队列
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