栈的实现:
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶(top),相对地,把另一端称为栈底(bottom)。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
栈接口: View Code View Code
1 /** 2 * 描述栈的基本操作 3 */ 4 public interface IStack{ 5 /** 6 * 元素入栈 7 */ 8 void push(T e); 9 10 /**11 * 弹出栈顶(栈中无此元素)12 */13 T pop();14 15 /**16 * 是否空栈17 */18 boolean empty();19 20 /**21 * 栈内元素个数22 */23 int getSize();24 25 /**26 * 查看栈顶元素,不弹出27 */28 T peek();29 }
栈的实现:
1 import java.util.EmptyStackException; 2 3 // DoubleLinkedList ListNode 前面的博客已经介绍 4 public class MyStackextends DoubleLinkedList implements IStack { 5 @Override 6 public void push(T e) { 7 super.add(e); 8 } 9 10 @Override11 public T pop() {12 if (size <= 0)13 throw new EmptyStackException();14 ListNode the = super.last.getPre();15 T res = the.getData();16 17 the.getPre().setNext(last);18 last.setPre(the.getPre());19 the.setNext(null);20 the.setPre(null);21 size--;22 return res;23 }24 25 @Override26 public boolean empty() {27 return getSize() == 0;28 }29 30 @Override31 public int getSize() {32 return super.getSize();33 }34 35 @Override36 public T peek() {37 return last.getPre().getData();38 }39 }
队列的实现:
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。队列结构与日常生活中排对等候服务的模型是一致的,最早进入队列的人,最早得到服务并从队首离开;最后到来的只能排在队列的最后,最后得到服务并最后离开。
队列接口: View Code View Code
1 /** 2 * 描述队列的基本操作 3 */ 4 public interface IQueue{ 5 // 入队 6 void enqueue(T e); 7 8 // 出队 9 T dequeue();10 11 // 返回队列的大小12 int getSize();13 14 // 判断队列是否为空15 boolean empty();16 17 // 取队首元素18 T peek();19 }
队列的实现:
1 //DoubleLinkedList ListNode 前面的博客已经介绍 2 public class MyQueueextends DoubleLinkedList implements IQueue { 3 @Override 4 public void enqueue(T e) { 5 super.add(e); 6 } 7 8 @Override 9 public T dequeue() {10 ListNode h = first.getNext();11 first.setNext(h.getNext());12 h.getNext().setPre(first);13 h.setPre(null);14 h.setNext(null);15 size--;16 return h.getData();17 }18 19 @Override20 public boolean empty() {21 return getSize() == 0;22 }23 24 @Override25 public T peek() {26 return first.getNext().getData();27 }28 }