Java資料結構和演算法初探

來源:互聯網
上載者:User

標籤:style   sort   span   調用   space   4.0   計算   http   oid   

//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);        }    }}

 

Java資料結構和演算法初探

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.