📜  数据结构和算法 |设置 3(1)

📅  最后修改于: 2023-12-03 15:26:09.646000             🧑  作者: Mango

数据结构和算法

背景

数据结构和算法是程序员需要掌握的基本技能, 它们在软件开发的过程中起到了至关重要的作用。数据结构和算法是任何程序员都需要学习和运用的基本技能,掌握它们可以使代码更加高效,结构更加清晰,并且能够提高开发工作的效率。

数据结构
数据结构的定义

数据结构是一种按照逻辑关系组织的数据元素的集合。通俗的说,数据结构是一种用来存储和组织数据的方式。数据结构可以分为线性结构和非线性结构两种。

常见数据结构

常见数据结构包括:数组、队列、栈、链表、树、图等。

//Java语言中创建数组的方式
int[] arr = new int[5];

//Java语言中创建队列的方式
Queue<Integer> queue = new LinkedList<>();

//Java语言中创建栈的方式
Stack<Integer> stack = new Stack<>();

//Java语言中创建链表的方式
LinkedList<Integer> linkedList = new LinkedList<>();

//Java语言中创建二叉树的方式
class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int val) {
        this.val = val;
        this.left = null;
        this.right = null;
    }
}

//Java语言中创建图的方式
class Graph {
    List<List<Integer>> graph; //邻接表存储图
    int vertices; //顶点数

    Graph(int vertices) {
        this.vertices = vertices;
        graph = new ArrayList<>();
        for(int i = 0; i < vertices; i++) {
            graph.add(new ArrayList<>());
        }
    }

    void addEdge(int u, int v) {
        graph.get(u).add(v);
        graph.get(v).add(u);
    }
}
算法
算法的定义

算法是一组完成任务的指令集合。在计算机科学中,算法通常被用来解决一些问题。简单来说,算法就是一些列步骤,用于解决问题并达到预期的目的。

常见算法

常见算法包括:排序算法、查找算法、递归算法、回溯算法、动态规划算法等。

//Java语言中实现冒泡排序的方式
void bubbleSort(int[] arr) {
    for(int i = 0; i < arr.length - 1; i++) {
        for(int j = 0; j < arr.length - i - 1; j++) {
            if(arr[j] > arr[j + 1]) {
                int tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
        }
    }
}

//Java语言中实现二分查找的方式
int binarySearch(int[] arr, int target) {
    int left = 0;
    int right = arr.length - 1;
    while(left <= right) {
        int mid = (left + right) / 2;
        if(arr[mid] == target) {
            return mid;
        }
        else if(arr[mid] < target) {
            left = mid + 1;
        }
        else {
            right = mid - 1;
        }
    }
    return -1;
}

//Java语言中实现递归算法的方式
int factorial(int n) {
    if(n == 0 || n == 1) {
        return 1;
    }
    return n * factorial(n - 1);
}

//Java语言中实现动态规划算法的方式
int fibonacci(int n) {
    int[] dp = new int[n + 1];
    dp[0] = 0;
    dp[1] = 1;
    for(int i = 2; i <= n; i++) {
        dp[i] = dp[i - 1] + dp[i - 2];
    }
    return dp[n];
}

//Java语言中实现回溯算法的方式
void backtrack(int[] nums, List<Integer> track, List<List<Integer>> res) {
    if(track.size() == nums.length) {
        res.add(new ArrayList<>(track));
        return;
    }

    for(int i = 0; i < nums.length; i++) {
        if(track.contains(nums[i])) {
            continue;
        }

        track.add(nums[i]);
        backtrack(nums, track, res);
        track.remove(track.size() - 1);
    }
}
总结

数据结构和算法在程序员的日常工作中有着至关重要的作用,程序员需要根据不同的业务需求,选择不同的数据结构和算法来完成任务,提高代码的效率和质量。同时,随着技术的不断发展,越来越多的数据结构和算法也在不断涌现,为程序员提供更多的选择和挑战,我们需要不断学习,不断进步。