本篇内容介绍了“Java怎么使用跳转结构实现队列和栈”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
队列
跳转结构结点
public static class Node<T> { public T value; public Node<T> next; public Node(T value) { this.value = value; } @Override public String toString() { ArrayList<T> nums = new ArrayList<>(); Node<T> node = this; while (node != null) { nums.add(node.value); node = node.next; } return nums.toString(); } }
实现队列
public static class MyQueue<T> { private Node<T> head; private Node<T> tail; private int size; public MyQueue() { head = null; tail = null; size = 0; } // 插入一个元素 public void offer(T t) { Node<T> node = new Node<>(t); if (head == null) { head = node; } else { tail.next = node; } tail = node; size++; } // 弹出一个元素 public T poll() { T ans = null; if (head != null) { ans = head.value; head = head.next; size--; } if (head == null) { tail = null; } return ans; } // 查看队首元素 public T peek() { T ans = null; if (head != null) { ans = head.value; } return ans; } //检查 队列是否为空 public Boolean isEmpty() { return size == 0; } // 查看队列的长度 public int size() { return size; } }
测试队列
public static void main(String[] args) { MyQueue<Integer> myQueue = new MyQueue<>(); Queue<Integer> test = new LinkedList<>(); int testTime = 5000000; int maxValue = 200000000; System.out.println("测试开始!"); for (int i = 0; i < testTime; i++) { if (myQueue.isEmpty() != test.isEmpty()) { System.out.println("Oops!"); } if (myQueue.size() != test.size()) { System.out.println("Oops!"); } double decide = Math.random(); if (decide < 0.33) { int num = (int) (Math.random() * maxValue); myQueue.offer(num); test.offer(num); } else if (decide < 0.66) { if (!myQueue.isEmpty()) { Integer num1 = myQueue.poll(); Integer num2 = test.poll(); if (!num1.equals(num2)) { System.out.println("Oops!"); } } } else { if (!myQueue.isEmpty()) { Integer num1 = myQueue.peek(); Integer num2 = test.peek(); if (!num1.equals(num2)) { System.out.println("Oops!"); } } } } if (myQueue.size() != test.size()) { System.out.println("Oops!"); } while (!myQueue.isEmpty()) { Integer num1 = myQueue.poll(); Integer num2 = test.poll(); if (!num1.equals(num2)) { System.out.println("Oops!"); } } System.out.println("测试结束!"); }
栈
实现栈
public static class MyStack<T> { private Node<T> head; private int size; public MyStack() { head = null; size = 0; } //检查 栈是否为空 public Boolean isEmpty() { return size == 0; } // 查看栈的长度 public int size() { return size; } // 插入一个元素 public void push(T t) { Node<T> node = new Node<>(t); if (head != null) { node.next = head; } head = node; size++; } public T pop() { T ans = null; if (head != null) { ans = head.value; head = head.next; size--; } return ans; } // 查看栈顶元素 public T peek() { T ans = null; if (head != null) { ans = head.value; } return ans; } }
测试代码
public static void main(String[] args) { MyStack<Integer> myStack = new MyStack<>(); Stack<Integer> test = new Stack<>(); int testTime = 5000000; int maxValue = 200000000; System.out.println("测试开始!"); for (int i = 0; i < testTime; i++) { if (myStack.isEmpty() != test.isEmpty()) { System.out.println("Oops!"); } if (myStack.size() != test.size()) { System.out.println("Oops!"); } double decide = Math.random(); if (decide < 0.33) { int num = (int) (Math.random() * maxValue); myStack.push(num); test.push(num); } else if (decide < 0.66) { if (!myStack.isEmpty()) { int num1 = myStack.pop(); int num2 = test.pop(); if (num1 != num2) { System.out.println("Oops!"); } } } else { if (!myStack.isEmpty()) { int num1 = myStack.peek(); int num2 = test.peek(); if (num1 != num2) { System.out.println("Oops!"); } } } } if (myStack.size() != test.size()) { System.out.println("Oops!"); } while (!myStack.isEmpty()) { int num1 = myStack.pop(); int num2 = test.pop(); if (num1 != num2) { System.out.println("Oops!"); } } System.out.println("测试结束!"); }