当前位置:   article > 正文

java实现栈(数组和链表两种实现方式)_java stack数组和链表

java stack数组和链表

栈的实现

栈是一种先进后出的数据结构

首先用数组实现,底层使用数组:

  1. public class MyArrayStack<T> {
  2. private Object[] objs = new Object[16];
  3. private int size = 0;
  4. public boolean isEmpty() {
  5. return size == 0;
  6. }
  7. public void clear() {
  8. // 将数组中的数据置为null, 方便GC进行回收
  9. for (int i = 0; i < size; i++) {
  10. objs[size] = null;
  11. }
  12. size = 0;
  13. }
  14. public int length() {
  15. return size;
  16. }
  17. public boolean push(T data) {
  18. // 判断是否需要进行数组扩容
  19. if (size >= objs.length) {
  20. resize();
  21. }
  22. objs[size++] = data;
  23. return true;
  24. }
  25. /**
  26. * 数组扩容
  27. */
  28. private void resize() {
  29. Object[] temp = new Object[objs.length * 3 / 2 + 1];
  30. for (int i = 0; i < size; i++) {
  31. temp[i] = objs[i];
  32. objs[i] = null;
  33. }
  34. objs = temp;
  35. }
  36. public T pop() {
  37. if (size == 0) {
  38. return null;
  39. }
  40. return (T) objs[--size];
  41. }
  42. public String toString() {
  43. StringBuilder sb = new StringBuilder();
  44. sb.append("MyArrayStack: [");
  45. for (int i = 0; i < size; i++) {
  46. sb.append(objs[i].toString());
  47. if (i != size - 1) {
  48. sb.append(", ");
  49. }
  50. }
  51. sb.append("]");
  52. return sb.toString();
  53. }
  54. }  
栈的链表实现,底层使用链表:

  1. public class MyLinkedStack<T> {
  2. /**
  3. * 栈顶指针
  4. */
  5. private Node top;
  6. /**
  7. * 栈的长度
  8. */
  9. private int size;
  10. public MyLinkedStack() {
  11. top = null;
  12. size = 0;
  13. }
  14. public boolean isEmpty() {
  15. return size == 0;
  16. }
  17. public void clear() {
  18. top = null;
  19. size = 0;
  20. }
  21. public int length() {
  22. return size;
  23. }
  24. public boolean push(T data) {
  25. Node node = new Node();
  26. node.data = data;
  27. node.pre = top;
  28. // 改变栈顶指针
  29. top = node;
  30. size++;
  31. return true;
  32. }
  33. public T pop() {
  34. if (top != null) {
  35. Node node = top;
  36. // 改变栈顶指针
  37. top = top.pre;
  38. size--;
  39. return node.data;
  40. }
  41. return null;
  42. }
  43. /**
  44. * 将数据封装成结点
  45. */
  46. private final class Node {
  47. private Node pre;
  48. private T data;
  49. }
  50. }


声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号