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)二叉树:堆排序,中排序以及图。

后面会一一讲解和实现。

posted @ 2017-08-22 14:35  C小海  阅读(572)  评论(0编辑  收藏  举报