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

Java 函数实现数据结构:栈、队列和链表

发布时间:2023-06-20 11:44:29

栈、队列和链表是计算机科学中最常见的数据结构之一。它们在算法、数据处理和编程中都有广泛的应用。在Java中,可以通过函数来轻松地实现这些数据结构,以便进行快速、高效的数据处理。

栈是一种后进先出(LIFO)的数据结构,它支持两个基本操作:push(压入)和pop(弹出)。push操作将元素添加到栈的顶部,而pop操作将从栈的顶部删除元素。

Java中可以通过Stack类来实现栈。Stack类是Java集合框架中的一部分,因此它可以使用Java集合框架中的所有方法和属性。下面是一个简单的Java函数实现栈:

import java.util.Stack;

public class MyStack {

    private Stack<Integer> stack;

    public MyStack() {

        stack = new Stack<>();

    }

    public void push(int num) {

        stack.push(num);

    }

    public int pop() {

        if (stack.empty()) {

            throw new RuntimeException("Stack is empty!");

        }

        return stack.pop();

    }

    public int peek() {

        if (stack.empty()) {

            throw new RuntimeException("Stack is empty!");

        }

        return stack.peek();

    }

    public boolean empty() {

        return stack.empty();

    }

    public int size() {

        return stack.size();

    }

    public static void main(String[] args) {

        MyStack myStack = new MyStack();

        myStack.push(1);

        myStack.push(2);

        myStack.push(3);

        System.out.println(myStack.pop()); // 输出3

        System.out.println(myStack.peek()); // 输出2

        System.out.println(myStack.empty()); // 输出false

        System.out.println(myStack.size()); // 输出2

    }

}

队列

队列是一种先进先出(FIFO)的数据结构,支持两个基本操作:enqueue(入队)和dequeue(出队)。enqueue操作将元素添加到队列的尾部,而dequeue操作将从队列的头部删除元素。

在Java中,可以通过Queue类来实现队列。Queue类是Java集合框架中的一部分,因此它可以使用Java集合框架中的所有方法和属性。下面是一个简单的Java函数实现队列:

import java.util.LinkedList;

import java.util.Queue;

public class MyQueue {

    private Queue<Integer> queue;

    public MyQueue() {

        queue = new LinkedList<>();

    }

    public void enqueue(int num) {

        queue.offer(num);

    }

    public int dequeue() {

        if (queue.isEmpty()) {

            throw new RuntimeException("Queue is empty!");

        }

        return queue.poll();

    }

    public int peek() {

        if (queue.isEmpty()) {

            throw new RuntimeException("Queue is empty!");

        }

        return queue.peek();

    }

    public boolean isEmpty() {

        return queue.isEmpty();

    }

    public int size() {

        return queue.size();

    }

    public static void main(String[] args) {

        MyQueue myQueue = new MyQueue();

        myQueue.enqueue(1);

        myQueue.enqueue(2);

        myQueue.enqueue(3);

        System.out.println(myQueue.dequeue()); // 输出1

        System.out.println(myQueue.peek()); // 输出2

        System.out.println(myQueue.isEmpty()); // 输出false

        System.out.println(myQueue.size()); // 输出2

    }

}

链表

链表是一种基本的数据结构,它由一系列节点组成,每个节点都包含一个数据元素和指向下一个节点的指针。链表可以用来表示这样的数据结构,其中数据元素之间没有任何特定的物理顺序。链表可以用来快速插入和删除元素,但查找元素需要遍历整个链表,因此效率较低。

在Java中,可以通过LinkedList类来实现链表。LinkedList类是Java集合框架中的一部分,因此它可以使用Java集合框架中的所有方法和属性。下面是一个简单的Java函数实现链表:

public class MyLinkedList {

    private Node head;

    private int size;

    public MyLinkedList() {

        head = null;

        size = 0;

    }

    public void add(int num) {

        Node node = new Node(num, null);

        if (head == null) {

            head = node;

        } else {

            Node current = head;

            while (current.getNext() != null) {

                current = current.getNext();

            }

            current.setNext(node);

        }

        size++;

    }

    public void remove(int num) {

        if (head == null) {

            throw new RuntimeException("List is empty!");

        }

        if (head.getData() == num) {

            head = head.getNext();

            size--;

            return;

        }

        Node current = head.getNext();

        Node previous = head;

        while (current != null && current.getData() != num) {

            previous = current;

            current = current.getNext();

        }

        if (current == null) {

            throw new RuntimeException("Element not found in list!");

        }

        previous.setNext(current.getNext());

        size--;

    }

    public int get(int index) {

        if (head == null) {

            throw new RuntimeException("List is empty!");

        }

        if (index < 0 || index >= size) {

            throw new RuntimeException("Invalid index!");

        }

        Node current = head;

        for (int i = 0; i < index; i++) {

            current = current.getNext();

        }

        return current.getData();

    }

    public int size() {

        return size;

    }

    public boolean isEmpty() {

        return size == 0;

    }

    public static void main(String[] args) {

        MyLinkedList myLinkedList = new MyLinkedList();

        myLinkedList.add(1);

        myLinkedList.add(2);

        myLinkedList.add(3);

        myLinkedList.remove(2);

        System.out.println(myLinkedList.get(1)); // 输出3

        System.out.println(myLinkedList.size()); // 输出2

        System.out.println(myLinkedList.isEmpty()); // 输出false

    }

}

总结

使用Java函数可以轻松地实现栈、队列和链表等数据结构,以便进行快速、高效的数据处理。在实现这些数据结构时,需要注意元素的插入、删除和访问顺序,以确保正确性和效率。通过Java函数实现这些数据结构,可以使代码更加可读、可维护和可扩展。