欢迎访问宙启技术站
智能推送

Java中如何实现栈数据结构的相关函数

发布时间:2023-07-01 23:34:54

在Java中,可以使用数组或链表来实现栈数据结构。

1. 使用数组实现栈数据结构:

首先声明一个数组和一个指向栈顶的变量top,用于记录栈顶元素的索引位置。然后实现如下几个基本函数:

- push(element):将元素压入栈顶,即将元素插入数组的top位置,然后将top加1。

- pop():从栈顶弹出一个元素,即返回数组top位置的元素,然后将top减1。

- peek():返回栈顶元素,即返回数组top位置的元素。

- isEmpty():判断栈是否为空,即判断top是否等于-1。

- isFull():判断栈是否满,即判断top是否等于数组的最大容量减1。

示例代码如下:

public class ArrayStack {
    private int[] stack;
    private int top;
    private int maxSize;

    public ArrayStack(int maxSize) {
        this.maxSize = maxSize;
        stack = new int[maxSize];
        top = -1;
    }

    public void push(int element) {
        if (isFull()) {
            System.out.println("Stack is full, cannot push element");
            return;
        }
        stack[++top] = element;
    }

    public int pop() {
        if (isEmpty()) {
            System.out.println("Stack is empty, cannot pop element");
            return -1;
        }
        return stack[top--];
    }

    public int peek() {
        if (isEmpty()) {
            System.out.println("Stack is empty");
            return -1;
        }
        return stack[top];
    }

    public boolean isEmpty() {
        return top == -1;
    }

    public boolean isFull() {
        return top == maxSize - 1;
    }
}

2. 使用链表实现栈数据结构:

首先定义一个节点类,包含元素和指向下一个节点的指针。然后实现如下几个基本函数:

- push(element):将元素压入栈顶,即创建一个新节点并将其作为链表的头部节点。

- pop():从栈顶弹出一个元素,即删除链表的头部节点。

- peek():返回栈顶元素,即返回链表的头部节点的元素。

- isEmpty():判断栈是否为空,即判断链表是否为空。

示例代码如下:

public class LinkedListStack {
    private Node top;

    public void push(int element) {
        Node newNode = new Node(element);
        newNode.next = top;
        top = newNode;
    }

    public int pop() {
        if (isEmpty()) {
            System.out.println("Stack is empty, cannot pop element");
            return -1;
        }
        int element = top.data;
        top = top.next;
        return element;
    }

    public int peek() {
        if (isEmpty()) {
            System.out.println("Stack is empty");
            return -1;
        }
        return top.data;
    }

    public boolean isEmpty() {
        return top == null;
    }

    private class Node {
        int data;
        Node next;

        public Node(int data) {
            this.data = data;
        }
    }
}

以上就是使用数组和链表两种方法实现栈数据结构的相关函数的示例代码。这些函数可以用于对栈进行操作,如压入元素、弹出元素、查看栈顶元素等。