zoukankan      html  css  js  c++  java
  • Java数据结构和算法初探

    //Data structure and algorithm

     一、数据结构和算法

     在任何语言中都是通用的,是一独立的学科,除了数据结构就是算法

     常用的数据结构:

     数组(Aray),( Stack),队列( Queue),二叉树、链表( Linked List)、哈希表、散列表(Hash)等算法

     冒泡排序( bubble sort)、选择排序( selection sort),二分法查找等

     数据结构和算法用得好,程序执行效率就高

     

     二、Java中栈

     

    栈按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在桟顶,需要读数据的时候从顶开始弹出数据(最后一个数据被第一个读出来)。

    是允许在同一端进行插入和删除操作的特殊銭性表。允许进行插入和删除操作的端称为栈顶(top),另一端为钱底( botton);底固定,而栈顶浮动中元素个数为零时称为空。

    插入一股称为进栈(PUSH),删除则称为退栈(POP)。栈也称为先进后出。

    栈可以用来在函数调用的时侯存储断点,做递归时要用到栈!

     

    三、使用图形,画出一个程序的执行流程

    方法的执行原理:

    方法在调用的时候,才会给该方法在内存中分配空间;如果方法只声明,不调用不会分配空间

    方法调用的时候在"栈"中分配空间,(JVM内存中有一块内存是 栈内存)

    方法调用其实是"压栈",方法结束其实就是"弹栈"

    只有结束符号才能"弹栈"

     

    public class Algorithm {
    
        public static void main(String[] args) {
          int i = 100;
          m1(i);
        }
    
        public static void m1(int i){
            m2(i);
        }
    
        public static void m2(int i){
           m3(i);
        }
        public static void m3(int i){
    
            System.out.println("m3中的方法中的i = " + i);
        }
        //层层传递
        public static void m4(int i){
            System.out.println("m3中的方法中的i = " + i);
        }
    
    }

    四、递归

    /*

     关于方法的递归调用

        1.方法的递归调用就是方法自身调用自身(自己调自己)

        2.以下程序因为递归没有结束条件,所以 一直在压栈,没有弹栈,导致栈内存溢出!

        3.所以递归必须要有结束条件

     */

     

    public class Recursion {
        public static void main(String[] args){
          array(1);
    
        }
        public static void array(int i){
            System.out.println("Array 被弹出来了");
          array(i);
        }
        /*
        Exception in thread "main" java.lang.StackOverflowError
        at Recursion.array(Recursion.java:7)
        at Recursion.array(Recursion.java:7)
         */
    }

    案例一、计算1-N的求和【不使用递归,怎么做】

     

    public class Recursion2 {
    
        public static void main(String[] agrs){
           int value = sum(6);
           System.out.println("value = " + value);
        }
        //该方法需要完成1-N的求和
        //1+2+3+...+N
        public static int sum(int n){
            int sum = 0;
            for (int i = 0; i <= n ; i ++){
                //sum =  sum + i;
                sum += i;
            }
            return sum;
        }
        //value = 21
    
        //递归操作
        public static int sum1(int n){
             if (n == 1){
                 return 1;
             }else  {
                 return  n + sum1(n-1);
             }
        }
        //value = 21
    
    }

    案例二、计算N的阶乘

    public class Recursion3 {
    
        public static void main(String[] args){
         int n = 5;
    
        System.out.println("N的阶乘 = " + sum2(n));//N的阶乘 = 120
        }
        //1.不使用递归
        public static int sum(int n){
            int result = 1;
            for (int i = 1 ; i <= n ; i++){
                result = result * i;
            }
            return result;
        }
        //2.使用递归
        public static int sum2(int n ){
            if (n == 1){
                return  1;
            }else  {
                return n * sum2(n-1);
            }
        }
    
    }
  • 相关阅读:
    Spring 签名加密+xml数据交互
    Spring 使用 RestTemplate 模拟 电商网站+支付平台
    SSM 框架搭建
    SpringMVC 登录验证实例
    四.Mybatis 动态sql语句
    三.Mybatis 多对一与一对多
    二.Mybatis 增删改查
    一.Mybatis 入门
    SSH框架搭建
    二)Spring AOP编程思想与动态代理
  • 原文地址:https://www.cnblogs.com/StevenHuSir/p/Java_AlgorithmAndDataStructure.html
Copyright © 2011-2022 走看看