日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java算法概述,Java数据结构与算法基础(一)概述与线性结构

發布時間:2025/3/15 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java算法概述,Java数据结构与算法基础(一)概述与线性结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java數據結構與算法基礎(二)遞歸算法

Java數據結構與算法基礎(一)概述與線性結構

學習目的:為了能更順暢的讀很多底層API代碼和拓寬解決問題的思路

一、數據結構概述

1.數據結構是什么?數據與數據之間的關系

2.數據結構的分類:

存儲結構分類:順序結構和鏈式結構

邏輯結構分類:線性結構(除了首位元素,其他元素都存在前一元素和后一元素)、集合結構(集合)、樹形結構(樹結構、文件夾、文件結構)、圖形結構(多對多結構)

二、算法概述

1.算法特性:輸入(0或多個輸入)、輸出(一個輸出)、有窮性(能出結果)、確定性(一一對應)、可行性(能解決問題)

2.算法的基本要求:正確性、可讀性、健壯性、時間復雜度、空間復雜度

3.沒有最好的算法,只有最適合的算法

三、線性結構

1.數組的基本概念與操作

① 存儲結構:順序方式存儲

② 訪問方式:數組名[下標],最大下標 = arr.length-1;

③ 元素默認值 = 0,賦值:數組名[下標] = value;

2.數組創建的時候就要指定長度(即數組長度不可變)

問題:如何解決數組長度不可變?如在數組末尾添加元素

解決:① 建一個新數組,長度 = oldArr.length+1;

② 復制舊數組元素到新數組,新數組的末尾元素 = 新元素;

③ oldArr = newArr

3.數組元素的刪除(先告訴我刪哪個元素)

① 建一個新數組,長度 = oldArr.length-1;

② 復制舊數組元素

newArr[i] = oldArr[i]; // inewArr[i] = oldArr[i+1]; // i>n

③ oldArr = newArr;

4.面向對象的數組

屬性(一個私有的數組)+方法(操作私有屬性數組的方法)

要點:① 長度變化就意味著要建新數組,替代舊數組

② 傳入下標的方法,首先都應該判斷數組越界的問題

5.(數組)查找算法

線性查找:依次對比元素,找到相同元素即break

二分法查找:① 先排序,再查找

public static int binarySearch(int [] arr, int target){

if (arr == null) {

return -1;

}

int begin = 0;

int end = arr.length-1;

int mid = ((end - begin) >>> 1) + begin;

while(begin <= end){

if (arr[mid] == target) {

return mid;

}

if(arr[mid] > target){

end = mid-1;

}else if(arr[mid] < target){

begin = mid+1;

}

mid = ((end - begin) >>> 1) + begin;

}

return -1;

}

6.棧:先進后出

數組實現:入棧(建新數組,復制元素,新元素放到新數組最后,新數組替換對象舊數組屬性)、出棧(建新數組,復制元素,取出最后一個元素,新數組替換對象中的舊數組屬性,返回舊數組的最后一個元素)、查看棧元素(不涉及數組長度變化,所以直接返回舊數組的索引對應的值即可)

7.隊列:先進先出

數組實現:入隊、出隊、隊列是否為空(套路:建新數組主要涉及長度、復制元素、替換舊數組操作)

8.單鏈表:

存儲形式:鏈式存儲(存當前節點,同時存下個節點的位置[最后一個節點除外])

Java中單鏈表的結構:

Node:

int data;

Node next;

public Node(int data){

this.data = data;

}

涉及的操作:

通過第一個節點進行追加操作:

① 獲取當前節點:Node currentNode = this;

② while(true){

獲取下一個節點:Node next = currentNode.next;

如果下個節點為null,即最后一個節點:break;

否則:currentNode = next;

}

③ 追加節點到末尾:currentNode.next = node;//入參的Node

④ 返回當前節點 return this;

判斷當前節點是否是最后一個節點:

判斷當前節點的下一個節點是否為空即可

☆ 刪除單鏈表的節點:取不到上個節點信息(這是問題),所以只能刪除下個節點信息

① 取到下下個節點

② 將下下個節點賦值給當前節點的下個節點

顯示所有節點信息:

① 打印當前節點信息

② currentNode = currentNode.next;

如果currentNode == null; break;

否則重復①~②

插入新節點:

① tempNode = currentNode.next;//作為下下個節點

② currentNode.next = node; //node 為新節點

③ node.next = tempNode;

9.循環鏈表:

結構:單鏈表的尾節點的下個節點是頭結點

LoopNode{

int data;

LoopNode next = this;//默認自身是個循環鏈表,下個節點為其自身,插入節點操作和單鏈表相同

}

10.雙向循環鏈表:

結構:包含上個節點信息、下個節點信息、當前節點內容

DoubleNode{

DoubleNode pre = this;

DoubleNode next = this;

int data;

}

主要操作:新增節點

總結

以上是生活随笔為你收集整理的java算法概述,Java数据结构与算法基础(一)概述与线性结构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。