基礎資料結構與演算法 陣列,佇列,鍊錶,棧

2021-10-11 23:48:14 字數 3238 閱讀 8791

/** * 判斷是否需要擴容

*/private

void

judgesize()

else}}

/** * 擴容或者收縮

** @param size

*/private

void

resize

(int size)

data = temp;

}public string pop()

else

}public

intgetsize()

public

boolean

isempty()

}

package edu.quene;

/** * 陣列實現迴圈佇列

* * 阻塞佇列實現需要考慮的問題

* 1,排隊,偶空閒的時候再拿,

* 2,丟棄,不處理,直接丟擲

* 3,佇列一定要有邊界,所以建議

* @author: lht

* @date: 2020/12/13 13:53

*/public

class

arrayqueue

/** * 入隊

** @param value

*/public

void

push

(int value)

else

}/**

* 出佇列

** @return

*/public

intpop()

else

}public

boolean

isempty()

public

intgetsize()

}

package edu.list;

/** * @author: lht

* @date: 2020/12/12 16:48

*/public

class

linklist

/** * 插入元素

* 新建乙個節點

* 將新建的節點的下乙個節點指向當前的節點頭

* 將最新的頭指向新插入的節點

*/public

void

insertposition

(object value,

int position)

else

listnode node =

newlistnode

(value)

;//iang新節點的下乙個節點指向查詢到節點的尾部。

node.next = current.next;

//將查詢到的節點的下乙個節點指向新節點

current.next = node;}}

/** * 刪除

*/public

void

delete

(int position)

else

current.next = current.next.next;}}

/** * 刪除頭節點

*/public

void

deletehead()

/** * 查詢

*/object find

(object index)

else

}return null;}}

class

listnode

}

package time;

/** * 計算演算法時間複雜度

* 常數:o(1)

* 對數:o(logn),o(nlogn)

* 線性:o(n)

* 線性對數:o(nlogn)

* 平方:o(n^2)

* n次方:o(n^n)

* 怎麼找時間複雜度

* 1,找到有迴圈的地方

* 2,找有網路請求的(rpc,遠端,分布式,資料庫請求)的地方

* 學習演算法的目地就是把**寫到最優。

* 優化的目標就是o(n^n)=>o(nlogn)=>o(logn)==>o(1);

* * 空間複雜度,就是找**程式所占用jvm的空間

* int p,list map .......

* * 學習思路

* (1)提公升能力的:全部學

* (2)突擊面試:注意幾個景點:鍊錶,排序演算法,二叉樹,紅黑樹,b-tree b+tree

* (3)樹+圖論+專項

* */

public

class

bigo

int a=1;

//執行1次 時間複雜度 o(1);

//所有能確定的常熟都是o(1),o(10000) ==>o(1)

for(

int i=

0;i<

3;i++

)/**i的值 2 4 8 16 2^n

* 即 2^x=n; 即 x= log2(n);

* 計算機忽略常熟 即 x=log(n);

*/int n=integer.max_value //n是未知數

,i=0

;while

(i<=n)

/**i的值 3 9 27 3^n

* 即 3^x=n; 即 x= log3(n);

* 計算機忽略常熟 即 x=log(n);

*/while

(i<=n)

//n=nlogn

for(

int j=

0;j//二分查詢演算法複雜度為 x=logn= =>o(n^2)

for(

int j=

0;j)/**

* 1,2,3,4,5,6,7 n =n(n+1)/2==》 演算法複雜度 o(n^2)

*/for(i=

0;i}}

資料結構與演算法 陣列與鍊錶(一)

定義 陣列是一種用一片連續的記憶體空間來儲存一組相同型別的資料的線性表結構。連續的記憶體空間 這個特點,決定了陣列支援隨機訪問的特性。計算機通過位址來訪問記憶體中的資料,陣列在記憶體中存放的是它的首位址,一維陣列的定址公式為a i add ress bas eadd ress i s izeo f ...

資料結構 陣列佇列

佇列的實現還是依託於一開始所寫的陣列 資料結構 二次封裝自己的陣列 一 完成陣列基本功能 資料結構 二次封裝自己的陣列 二 公升級為泛型陣列 資料結構 二次封裝自己的陣列 三 公升級為動態陣列 下面是佇列的實現 class arrayqueue queue public arrayqueue pub...

演算法 資料結構篇 陣列和鍊錶

演算法和資料結構都是非常基礎的內容,經常使用,但是又很容易被忽視,而被重視的時候往往是面試官提問的時候。之前很不理解為什麼面試官總喜歡問演算法和資料結構,日常價值不大的東西。後來隨著工作的深入,越發的理解 演算法 資料結構 程式 之所以後來理解了這個公式,系統學過演算法和資料結構的知識,清楚的知道它...