自定义栈和队列
来源:互联网 发布:网络交换器 编辑:程序博客网 时间:2024/05/21 19:44
一、栈
首先来使用简单的方式LinkedList来定义
import java.util.LinkedList;/** * Created by lili on 15/11/14. */public class MyStack { private LinkedList linkedList; public MyStack() { linkedList = new LinkedList(); } public void push(Object o) { linkedList.addFirst(o); } public Object pop() { //删除并返回 return linkedList.removeFirst(); } public boolean isEmpty() { return linkedList.isEmpty(); }}
再使用数组的方式来定义,这个包括了容量的扩充
(1)首先定义一个接口
public interface IStack<T> { //元素出栈,并返回出栈元素 public T pop(); //元素入栈 public void push(T element); //获取栈顶元素 public T peek(); //判断栈是否为空 public boolean isEmpty(); public void clear(); }
public class ArrayStack<T> implements IStack<T> { private final int DEFAULT_SIZE = 3; private int size = 0; private int capacity = 0; //top指向下一个能够添加元素的位置 private int top = 0; private Object[] array; public ArrayStack(){ this.capacity = this.DEFAULT_SIZE; this.array = new Object[this.capacity]; this.size = 0; } public ArrayStack(int capacity){ this.capacity = capacity; this.array = new Object[this.capacity]; this.size = 0; } @Override public boolean isEmpty() { // TODO Auto-generated method stub return size == 0; } @Override public T peek() { // TODO Auto-generated method stub return (T)this.array[this.top-1]; } @Override public T pop() { // TODO Auto-generated method stub T element = (T)this.array[top - 1]; this.array[top-1] = null; this.size--; return element; } @Override public void push(T element) { // TODO Auto-generated method stub if(this.size < this.capacity){ this.array[top] = element; this.top++; this.size ++; }else{ // System.out.println("out of array"); enlarge(); push(element); } } public void enlarge(){ this.capacity = this.capacity + this.DEFAULT_SIZE; Object[] newArray = new Object[this.capacity]; System.arraycopy(array, 0, newArray, 0, array.length); Arrays.fill(array, null); this.array = newArray; } public int size(){ return this.size; } @Override public void clear() { // TODO Auto-generated method stub Arrays.fill(array, null); this.top = 0; this.size = 0; this.capacity = this.DEFAULT_SIZE; this.array = new Object[this.capacity]; } }
二、队列
(1)可以使用两个栈的方式来实现队列,如下使用的是LinkedList的方式
public class MyQueue{ private LinkedList list = new LinkedList(); public void clear()//销毁队列 { list.clear(); } public boolean QueueEmpty()//判断队列是否为空 { return list.isEmpty(); } public void enQueue(Object o)//进队 { list.addLast(o); } public Object deQueue()//出队 { if(!list.isEmpty()) { return list.removeFirst(); } return "队列为空"; } public int QueueLength()//获取队列长度 { return list.size(); } public Object QueuePeek()//查看队首元素 { return list.getFirst(); }
(2)使用数组的方式来定义队列
public class Queue<E> { private int front; private int rear; private int count; private int queueSize; private E[] object; public Queue() { this(10); } public Queue(int queueSize) { this.queueSize = queueSize; this.object = (E[]) new Object[queueSize]; this.front = 0; this.rear = 0; this.count = 0; } public boolean isEmpty() { return count == 0; } public boolean isFull() { return count == queueSize; } public void push(E o) { if (this.isFull()) { throw new RuntimeException("队列是满的"); } count++; object[rear] = o; rear = (rear + 1) % queueSize; } public E pop() { E result; if (this.isEmpty()) { throw new RuntimeException("队列是空的"); } result = this.object[front]; count--; front = (front + 1) % queueSize; return result; } public E peek() { if (this.isEmpty()) { throw new RuntimeException("队列是空的"); } return this.object[front]; } public int getCount() { return count; } public int getQueueSize() { return queueSize; } public int getFront() { return front; } public int getRear() { return rear; } public E[] getObject() { return object; } }
阅读全文
1 0
- 自定义栈和队列
- 自定义队列和泛型
- 自定义数组列表和队列
- 栈和队列--队列
- 【栈和队列】队列
- 栈、队列(自定义队列)、数组
- GCD自定义的队列 和 全局队列的区别
- Queue与Deque队列和自定义堆栈
- 栈、队列和优先队列
- 栈和队列(队列)
- 自定义队列
- 自定义队列
- 工作队列(系统工作队列和自定义工作队列使用区别) tasklet
- 栈和队列--栈
- 【栈和队列】栈
- 栈和队列
- 栈和队列
- 表、栈和队列
- 【Go】Go语言中反射包的实现原理(The Laws of Reflection)
- python opencv入门 Canny边缘检测(15)
- 编程实战之:NTC采样程序设计
- 根据MAC地址生成软件的序列号
- 帧布局
- 自定义栈和队列
- vue表单验证组件 v-verify-plugin
- 二分图匹配之最佳匹配 km算法详解
- wechat-plus 使用node开发微信公众号
- node 控制 树莓派做的天气闹钟
- JS三元运算符
- 读《程序员生存定律》心得体会
- java云课堂 单词长度
- Hessian源码剖析(七)