[关闭]
@XQF 2018-03-07T22:52:26.000000Z 字数 1354 阅读 883

如何用数组和链表实现栈

数据结构与算法


1.数组实现栈

栈,首先考虑比较厉害的泛型。不是简单的整数就可以了。数组一定要是Obejct[]创建,后面直接进行Cast就可以了。因为
T [] t=new T[length];;不合法

  1. class MyStack<T> {
  2. private Object[] items;
  3. public MyStack() {
  4. items = new Object[10];
  5. }
  6. public void push(T t) {
  7. if (isFull()) {
  8. int newLength = length() + 10;
  9. items = Arrays.copyOf(items, newLength);
  10. }
  11. for (int i = 0; i < items.length; i++) {
  12. if (items[i] == null) {
  13. items[i] = t;
  14. return;
  15. }
  16. }
  17. }
  18. public T pop() {
  19. T t;
  20. for (int i = items.length - 1; i >= 0; i--) {
  21. if (items[i] != null) {
  22. t = (T) items[i];
  23. items[i] = null;
  24. return t;
  25. }
  26. }
  27. return null;
  28. }
  29. public boolean empty() {
  30. if (items.length == 0) {
  31. return true;
  32. }
  33. return false;
  34. }
  35. public int search(T t) {
  36. for (int i = 0; i < items.length; i++) {
  37. if (items[i].equals(t)) {
  38. return i;
  39. }
  40. }
  41. return 0;
  42. }
  43. public int length() {
  44. return items.length;
  45. }
  46. private boolean isFull() {
  47. for (Object t : items) {
  48. if (t == null) {
  49. return false;
  50. }
  51. }
  52. return true;
  53. }
  54. }

2.链表实现栈

链表泛型
栈泛型

  1. class ListNode<T> {
  2. T data;
  3. ListNode<T> next;
  4. public ListNode(T data) {
  5. this.data = data;
  6. }
  7. }
  8. class MyStack<T> {
  9. private ListNode<T> top;
  10. public MyStack() {
  11. top = null;
  12. }
  13. public boolean isEmpty() {
  14. if (top == null) {
  15. return true;
  16. }
  17. return false;
  18. }
  19. public void push(T t) {
  20. ListNode<T> node = new ListNode<>(t);
  21. node.next = top;
  22. top = node;
  23. }
  24. public T pop() {
  25. T t = top.data;
  26. top = top.next;
  27. return t;
  28. }
  29. public T peek() {
  30. return top.data;
  31. }
  32. }
  33. public class Solution {
  34. public static void main(String[] args) {
  35. MyStack<Integer> stack = new MyStack<>();
  36. stack.push(2);
  37. System.out.println(stack.isEmpty());
  38. stack.pop();
  39. System.out.println(stack.isEmpty());
  40. }
  41. }

false
true
链表实现栈实在是太简单了

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注