当前位置:   article > 正文

算法(第四版)——栈_算法第四版中栈实现

算法第四版中栈实现

定义

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。 

代码实现

链表实现

  1. public class Stack<Item> {
  2. private Node first; // 栈顶(最近添加的元素)
  3. private int N; // 元素数量
  4. /**
  5. * 返回栈是否为空
  6. * @return true 栈为空, false 栈不为空。
  7. */
  8. public boolean isEmpty() {
  9. return N == 0;
  10. }
  11. /**
  12. * 返回栈内元素数目
  13. * @return 栈内元素数目
  14. */
  15. public int size() {
  16. return N;
  17. }
  18. /*
  19. * 添加元素到栈
  20. * @param item 添加的元素
  21. */
  22. public void push (Item item) {
  23. Node oldNode = first;
  24. first = new Node();
  25. first.data = item;
  26. first.next = oldNode;
  27. N++;
  28. }
  29. /*
  30. * 从栈顶移除元素
  31. * return 移除的元素
  32. */
  33. public Item pop() {
  34. Item item = first.data;
  35. first = first.next;
  36. N--;
  37. return item;
  38. }
  39. // 定义了节点的内部类
  40. private class Node {
  41. Item data;
  42. Node next;
  43. }
  44. public static void main(String[] args) {
  45. Stack<String> s = new Stack()<String>;
  46. System.out.println(s.isEmpty());
  47. s.push("hhhhh");
  48. System.out.println(s.first.data);
  49. }
  50. }

数组实现 

 

  1. public class Stack<Item> {
  2. private item[] a = (Item[]) new Object[1]; // 存储栈内元素
  3. private int N; // 栈内元素数目
  4. /*
  5. * 返回栈是否为空
  6. * @return true 栈为空,false 栈不为空。
  7. */
  8. public boolean isEmpty() {
  9. return N == 0;
  10. }
  11. /**
  12. * 返回栈内元素数目
  13. * @return 栈内元素数目
  14. */
  15. public int size() {
  16. return N;
  17. }
  18. /*
  19. * 添加元素到栈
  20. * @param item 添加的元素
  21. */
  22. public void push (Item item) {
  23. if (N == a.length) {
  24. resize(2 * a.length);
  25. }
  26. a[++N] = item;
  27. }
  28. /*
  29. * 从栈顶移除元素
  30. * return 移除的元素
  31. */
  32. public Item pop() {
  33. Item item = a[--N];
  34. a[N] == null;
  35. if (N > 0 && N == a.length / 4) {
  36. resize(a.length / 2);
  37. }
  38. return item;
  39. }
  40. /**
  41. * 重置数组大小
  42. * @param max 重置的数组大小
  43. */
  44. public void resize(int max) {
  45. // 将栈移动到一个新数组
  46. Item[] temp = (Item[]) new Object[max];
  47. for (int i = 0; i < N; i++) {
  48. temp[i] = a[i];
  49. a = temp;
  50. }
  51. }
  52. public static void main(String[] args) {
  53. Stack<String> s = new Stack()<String>;
  54. System.out.println(s.isEmpty());
  55. s.push("hhhhh");
  56. System.out.println(s.a[0]);
  57. }
  58. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/569505
推荐阅读
相关标签
  

闽ICP备14008679号