• java数据结构与算法(一)


    1、数据结构概念

      所谓的数据结构是数据之间的关系,都是为了提高程序效率而设计的。

      分为逻辑关系物理关系两种。

      逻辑关系:人为的一种逻辑思维的认为。

        (1)集合:在一个范围内有多个数据,数据之间没有关系

        (2)线性:11的关系

        (3)树型:1对多的关系

        (4)图:多对多

      物理关系:内存存储的一种关系。

        (1)顺序存储:数组方式

        (2)链式存储:链表方式

    2、算法

      (1)大数据的运算

      例如:很大的阶层运算,1*2*3*...*50=?

    public class DataStratum01 {
        
        public static void main(String[] args) {
            
            // 10的阶层计算
            int n = 50;
            
            int[] datas = new int[100];
            datas[datas.length - 1] = 1;
            for (int i = 1; i <= n; i++) {
                cal(datas, i);
            }
            
            for (int i = 0; i < datas.length; i++) {
                System.err.print(datas[i]);
            }
        }
        
        /* 计算阶层 */
        public static int[] cal(int[] datas, int num) {
            
            for (int i = 0; i < datas.length; i++) {
                datas[i] *= num;
            }
            
            for (int i = datas.length - 1; i > 0; i--) {
                int temp = datas[i] / 10;
                if (temp > 0) {
                    datas[i - 1] += temp;
                }
                datas[i] %= 10;
            }
            
        return datas;
        }
    }

      (2)插入排序运算

    public class DataInsertSort {
        public static void main(String[] args) {
            // 插入排序:方法一,用到了三个循环
            
            int[] datas = {7,3,8,2,1,9,4,5};
            
            for (int i = 1; i < datas.length; i++) {
                if (datas[i] < datas[i - 1]) { // 当发现i的位置小于i-1的位置的时候
                    for (int j = 0; j < i; j++) {
                        if (datas[i] < datas[j]) { // 当发现i的位置小于j的位置时候
                            int temp = datas[i];
                            for (int k = i - 1; k >= j; k--) { // k位置的数据往后移动
                                datas[k + 1] = datas[k];
                            }
                            datas[j] = temp;
                        }
                    }
                }
            }
            
            for (int i = 0; i < datas.length; i++) {
                System.out.print(datas[i]);
            }
        }
    }

      结果:

      (3)查找数据

      例如:二分查找法

    public class DataBinarySearch {
        // 二分查找法
        public static void main(String[] args) {
            
            int[] datas = {2, 4, 7, 8, 10, 12, 16, 19, 20};
            int num = 1;
            int start = 0; // 开始位置
            int end = datas.length - 1; // 末尾位置
            int centre = 0; // 中间位置,默认0
            while (start <= end) {
                centre = (start + end) / 2; // 获取中间位置
                if (num == datas[centre]) { // 如果找到
                    System.err.println("存在需要查找的数据:所在为主-" + centre + ", 数字为-" + num);
                    return ;
                }
                if (num < datas[centre]) { // 需要查找的数据在中间位置的左边
                    end = centre - 1;
                } else { // 需要查找的数据在中间位置的右边:num > datas[centre]
                    start = centre + 1;
                }
            }
            System.err.println("不存在需要查找的数据!");
        }
    }

    3、其他

    有关数据结构与算法的知识还有:

    1)ArrayListLinkList原理,代码实现,性能区别

    2)栈和队列的代码实现

    3)递归:文件夹遍历,八皇后,汉罗塔,寻址

    4)二叉树:堆排序,中排序以及图。

    后面会一一讲解和实现。

  • 相关阅读:
    系统学习 TypeScript(四)——变量声明的初步学习
    系统学习 TypeScript(二)——开发流程和语法规则
    不联网的情况下,使用 electronbuilder 快速打包全平台应用
    开发提效小技巧分享(二)
    开发提效小技巧分享(一)
    系统学习 TypeScript(五)——联合类型
    系统学习 TypeScript(三)——基础类型
    系统学习 TypeScript(六)——认识接口
    迭代器总结
    创建react 项目
  • 原文地址:https://www.cnblogs.com/c-xiaohai/p/7411471.html
Copyright © 2020-2023  润新知