博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
顺序栈和非顺序队列
阅读量:4203 次
发布时间:2019-05-26

本文共 4528 字,大约阅读时间需要 15 分钟。

import java.util.EmptyStackException;/** * 用顺序映像实现Stack * @param 
*/public class SequentialStack
{ private E[] elements; private int top = -1; private int size; private final static int INITIAL_CAPACITY = 16; private final static int MAX_CAPACITY = Integer.MAX_VALUE - 8; @SuppressWarnings("unchecked") public SequentialStack() { elements =(E[]) new Object[INITIAL_CAPACITY]; } @SuppressWarnings("unchecked") public SequentialStack(int capacity) { if (capacity < 0 || capacity > Integer.MAX_VALUE - 8) { throw new IndexOutOfBoundsException("capacity=" + capacity); } elements =(E[]) new Object[capacity]; } //判空 public boolean isEmpty() { return top == -1; } //入栈 public void push(E e) { if (size == elements.length) { int newLength=calculateCapacity(); grow(newLength); } elements[++top]=e; size++; } //出栈 public E pop() { if(isEmpty()){ throw new EmptyStackException(); } E value = elements[top]; elements[top--]=null; return value; } //获取栈顶值 public E peek(){ if(isEmpty()){ throw new EmptyStackException(); } E value = elements[top]; return value; } //扩容 @SuppressWarnings("unchecked") private void grow(int newLength) { E[] newArr = (E[]) new Object[newLength]; for (int i = top; i >=0 ; i--) { newArr[i]=elements[i]; } elements=newArr; } //计算新数组长度 private int calculateCapacity() { if(size==MAX_CAPACITY){ throw new ArrayStoreException(); } int len=elements.length+(elements.length>>1); if(len>MAX_CAPACITY||len<=0){ len=MAX_CAPACITY; } return len; } public static void main(String[] args) { SequentialStack
ss=new SequentialStack<>(6); System.out.println(ss.isEmpty()); //ss.pop(); ss.push("FGO"); //java.lang.ArrayStoreException ss.push("战舰少女R"); ss.push("明日方舟"); System.out.println(ss.peek()); ss.push("万象物语"); ss.pop(); System.out.println(ss.peek()); /*SequentialStack
ss=new SequentialStack<>(6); System.out.println(ss.isEmpty()); //ss.pop(); ss.push('a'); //java.lang.ArrayStoreException: java.lang.Character ss.push('b'); ss.push('c'); System.out.println(ss.peek());*/ }}
import exception.EmptyQueueException;/** * 用非顺序映像实现Queue */public class LinkedQueue
{ private Node front=new Node(null); //插入的队头结点 private Node rear=new Node(null); //删除的队尾节点 private class Node{ E val; Node next; Node prev; Node(E val){ this.val=val; } Node(Node prev,E val,Node next){ this.prev=prev; this.val=val; this.next=next; } } LinkedQueue(){ front.prev=rear; rear.next=front; } //判空 public boolean isEmpty(){ return rear.next==front; } //入队 public void enQueue(E e){ Node newNode = new Node(e); newNode.prev=front.prev; front.prev.next=newNode; newNode.next=front; front.prev=newNode; } //出队 public E deQueue(){ if(isEmpty()){ throw new EmptyQueueException(); } E value=rear.next.val; rear.next.val=null; rear.next=rear.next.next; rear.next.prev=rear; return value; } public String toSting(){ StringBuilder sb=new StringBuilder("["); Node p=front.prev; while(p!=rear){ if(p!=front.prev){ sb.append(","); } sb.append(p.val); p=p.prev; } return sb.append("]").toString(); } public static void main(String[] args) { LinkedQueue queue = new LinkedQueue(); System.out.println(queue.isEmpty()); queue.enQueue("德克萨斯"); queue.enQueue("能天使"); queue.enQueue("拉普兰德"); System.out.println(queue.toSting()); System.out.println(queue.deQueue()); queue.enQueue("空"); queue.enQueue("可颂"); System.out.println(queue.toSting()); }}
package exception;public class EmptyQueueException extends RuntimeException{    public EmptyQueueException() {        super();    }    public EmptyQueueException(String message) {        super(message);    }}

转载地址:http://exvli.baihongyu.com/

你可能感兴趣的文章
fcntl 函数
查看>>
HAL学习
查看>>
adb流水账
查看>>
fd_set 用法
查看>>
calloc
查看>>
android中的category
查看>>
使用PreferenceActivity和PreferenceScreen构建应用的设置
查看>>
java内部类的作用分析
查看>>
排序算法小结
查看>>
Android ViewPager多页面滑动切换以及动画效果
查看>>
创建自定义控件1-创建一个视图类
查看>>
创建自定义控件2-自定义绘制
查看>>
创建自定义控件3-可交互性
查看>>
创建自定义控件4-优化
查看>>
android 当系统存在多个Launcher时,如何设置开机自动进入默认的Launcher?
查看>>
Launcher介绍总结
查看>>
对View进行截图 View.getDrawingCache return NULL
查看>>
Using Touch Gestures 》Managing Touch Events in a ViewGroup
查看>>
Using Touch Gestures 》Tracking Movement
查看>>
Using Touch Gestures 》Detecting Common Gestures
查看>>