21xrx.com
2024-11-22 18:22:09 Friday
登录
文章检索 我的文章 写文章
我很喜欢用Java编程语言
2023-06-15 15:11:27 深夜i     --     --

我很喜欢用Java编程语言,而在Java中,栈(stack)是一种非常常用的数据结构。下面我来分享一下我对Java栈的理解和常用方法。

首先来看如何实现一个Java栈。在Java中,我们可以使用数组或链表来实现栈。对于数组实现的栈,我们需要定义一个数组来存储元素,同时需要记录栈顶指针,表示栈顶元素的位置。具体实现可以参考以下代码:


public class ArrayStack {

  private static final int DEFAULT_CAPACITY = 10;

  private T[] data;

  private int top;

  public ArrayStack() {

    this(DEFAULT_CAPACITY);

  }

  public ArrayStack(int capacity) {

    data = (T[]) new Object[capacity];

    top = -1;

  }

  public void push(T element) {

    if (isFull()) {

      throw new RuntimeException("Stack is full");

    }

    data[++ top] = element;

  }

  public T pop() {

    if (isEmpty()) {

      throw new RuntimeException("Stack is empty");

    }

    return data[top --];

  }

  public T top() {

    if (isEmpty()) {

      throw new RuntimeException("Stack is empty");

    }

    return data[top];

  }

  public boolean isEmpty() {

    return top == -1;

  }

  public boolean isFull() {

    return top == data.length - 1;

  }

  public int size() {

    return top + 1;

  }

}

这里我们使用泛型来定义栈的元素类型,使得栈可以存储任何类型的元素。同时,我们还定义了常用的push、pop、top、isEmpty、isFull和size方法,用来实现栈的基本功能。

而对于链表实现的栈,我们只需要定义一个链表的头部指针即可。具体实现可以参考以下代码:


public class LinkedStack {

  private Node head;

  private int size;

  private static class Node {

    T data;

    Node next;

    public Node(T data, Node next) {

      this.data = data;

      this.next = next;

    }

  }

  public LinkedStack() {

    head = null;

    size = 0;

  }

  public void push(T element) {

    head = new Node<>(element, head);

    size ++;

  }

  public T pop() {

    if (isEmpty()) {

      throw new RuntimeException("Stack is empty");

    }

    T element = head.data;

    head = head.next;

    size --;

    return element;

  }

  public T top() {

    if (isEmpty()) {

      throw new RuntimeException("Stack is empty");

    }

    return head.data;

  }

  public boolean isEmpty() {

    return head == null;

  }

  public int size() {

    return size;

  }

}

上面的代码与数组实现的栈类似,只不过使用了链表来存储元素。同样,我们还定义了常用的push、pop、top、isEmpty和size方法。

除了上面实现的基本操作外,Java栈还有许多常用的方法,下面我来简单介绍一些。

1. contains方法:用来判断栈中是否包含某个元素。

2. clear方法:用来清空栈中的所有元素。

3. toArray方法:用来将栈中的所有元素转化为数组形式,便于遍历和访问。

4. search方法:用来获取某个元素在栈中的位置,如果找不到则返回-1。

5. Iterator迭代器:用来对栈进行迭代,访问栈中的元素。

综上所述,Java栈是一种非常常用的数据结构,使用方便而且功能强大。无论是数组实现还是链表实现,都可以实现栈的基本操作。另外,我们还可以使用一些常用的方法来对栈进行操控,使得栈的应用更加方便和高效。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复