Java怎么使用跳转结构实现队列和栈

其他教程   发布日期:2025年03月09日   浏览次数:135

本篇内容介绍了“Java怎么使用跳转结构实现队列和栈”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

队列

跳转结构结点

  1. public static class Node<T> {
  2. public T value;
  3. public Node<T> next;
  4. public Node(T value) {
  5. this.value = value;
  6. }
  7. @Override
  8. public String toString() {
  9. ArrayList<T> nums = new ArrayList<>();
  10. Node<T> node = this;
  11. while (node != null) {
  12. nums.add(node.value);
  13. node = node.next;
  14. }
  15. return nums.toString();
  16. }
  17. }

实现队列

  1. public static class MyQueue<T> {
  2. private Node<T> head;
  3. private Node<T> tail;
  4. private int size;
  5. public MyQueue() {
  6. head = null;
  7. tail = null;
  8. size = 0;
  9. }
  10. // 插入一个元素
  11. public void offer(T t) {
  12. Node<T> node = new Node<>(t);
  13. if (head == null) {
  14. head = node;
  15. } else {
  16. tail.next = node;
  17. }
  18. tail = node;
  19. size++;
  20. }
  21. // 弹出一个元素
  22. public T poll() {
  23. T ans = null;
  24. if (head != null) {
  25. ans = head.value;
  26. head = head.next;
  27. size--;
  28. }
  29. if (head == null) {
  30. tail = null;
  31. }
  32. return ans;
  33. }
  34. // 查看队首元素
  35. public T peek() {
  36. T ans = null;
  37. if (head != null) {
  38. ans = head.value;
  39. }
  40. return ans;
  41. }
  42. //检查 队列是否为空
  43. public Boolean isEmpty() {
  44. return size == 0;
  45. }
  46. // 查看队列的长度
  47. public int size() {
  48. return size;
  49. }
  50. }

测试队列

  1. public static void main(String[] args) {
  2. MyQueue<Integer> myQueue = new MyQueue<>();
  3. Queue<Integer> test = new LinkedList<>();
  4. int testTime = 5000000;
  5. int maxValue = 200000000;
  6. System.out.println("测试开始!");
  7. for (int i = 0; i < testTime; i++) {
  8. if (myQueue.isEmpty() != test.isEmpty()) {
  9. System.out.println("Oops!");
  10. }
  11. if (myQueue.size() != test.size()) {
  12. System.out.println("Oops!");
  13. }
  14. double decide = Math.random();
  15. if (decide < 0.33) {
  16. int num = (int) (Math.random() * maxValue);
  17. myQueue.offer(num);
  18. test.offer(num);
  19. } else if (decide < 0.66) {
  20. if (!myQueue.isEmpty()) {
  21. Integer num1 = myQueue.poll();
  22. Integer num2 = test.poll();
  23. if (!num1.equals(num2)) {
  24. System.out.println("Oops!");
  25. }
  26. }
  27. } else {
  28. if (!myQueue.isEmpty()) {
  29. Integer num1 = myQueue.peek();
  30. Integer num2 = test.peek();
  31. if (!num1.equals(num2)) {
  32. System.out.println("Oops!");
  33. }
  34. }
  35. }
  36. }
  37. if (myQueue.size() != test.size()) {
  38. System.out.println("Oops!");
  39. }
  40. while (!myQueue.isEmpty()) {
  41. Integer num1 = myQueue.poll();
  42. Integer num2 = test.poll();
  43. if (!num1.equals(num2)) {
  44. System.out.println("Oops!");
  45. }
  46. }
  47. System.out.println("测试结束!");
  48. }

实现栈

  1. public static class MyStack<T> {
  2. private Node<T> head;
  3. private int size;
  4. public MyStack() {
  5. head = null;
  6. size = 0;
  7. }
  8. //检查 栈是否为空
  9. public Boolean isEmpty() {
  10. return size == 0;
  11. }
  12. // 查看栈的长度
  13. public int size() {
  14. return size;
  15. }
  16. // 插入一个元素
  17. public void push(T t) {
  18. Node<T> node = new Node<>(t);
  19. if (head != null) {
  20. node.next = head;
  21. }
  22. head = node;
  23. size++;
  24. }
  25. public T pop() {
  26. T ans = null;
  27. if (head != null) {
  28. ans = head.value;
  29. head = head.next;
  30. size--;
  31. }
  32. return ans;
  33. }
  34. // 查看栈顶元素
  35. public T peek() {
  36. T ans = null;
  37. if (head != null) {
  38. ans = head.value;
  39. }
  40. return ans;
  41. }
  42. }

测试代码

  1. public static void main(String[] args) {
  2. MyStack<Integer> myStack = new MyStack<>();
  3. Stack<Integer> test = new Stack<>();
  4. int testTime = 5000000;
  5. int maxValue = 200000000;
  6. System.out.println("测试开始!");
  7. for (int i = 0; i < testTime; i++) {
  8. if (myStack.isEmpty() != test.isEmpty()) {
  9. System.out.println("Oops!");
  10. }
  11. if (myStack.size() != test.size()) {
  12. System.out.println("Oops!");
  13. }
  14. double decide = Math.random();
  15. if (decide < 0.33) {
  16. int num = (int) (Math.random() * maxValue);
  17. myStack.push(num);
  18. test.push(num);
  19. } else if (decide < 0.66) {
  20. if (!myStack.isEmpty()) {
  21. int num1 = myStack.pop();
  22. int num2 = test.pop();
  23. if (num1 != num2) {
  24. System.out.println("Oops!");
  25. }
  26. }
  27. } else {
  28. if (!myStack.isEmpty()) {
  29. int num1 = myStack.peek();
  30. int num2 = test.peek();
  31. if (num1 != num2) {
  32. System.out.println("Oops!");
  33. }
  34. }
  35. }
  36. }
  37. if (myStack.size() != test.size()) {
  38. System.out.println("Oops!");
  39. }
  40. while (!myStack.isEmpty()) {
  41. int num1 = myStack.pop();
  42. int num2 = test.pop();
  43. if (num1 != num2) {
  44. System.out.println("Oops!");
  45. }
  46. }
  47. System.out.println("测试结束!");
  48. }

以上就是Java怎么使用跳转结构实现队列和栈的详细内容,更多关于Java怎么使用跳转结构实现队列和栈的资料请关注九品源码其它相关文章!