資料結構演算法爬坑日記一

2021-10-09 05:25:39 字數 4255 閱讀 2106

線性結構:最常用的資料結構,特點是資料元素之間存在一對一的線性關係

** 分倆種儲存結構 **

1.順序儲存結構:又稱為順序表,儲存元素是連續的 **

2.鏈式儲存結構:又稱為鍊錶,儲存元素不一定是連續的,元素節點中存放資料元素以及相鄰元素的位址結構

常見線性資料結構:陣列、佇列、鍊錶、棧

非線性結構:常見二維陣列、多維陣列、廣義表、樹、圖

使用場景:如果乙個陣列很多元素的值都相同時,使用稀疏陣列來儲存該陣列,縮小儲存規模,提高效率

以二維陣列轉化的稀疏陣列為例:第一行為二維陣列的總行數、總列數和不為0的數,第二行開始記錄每個不為0的

數的具體位置,第一列為行的位置,第二列為列的位置,第三列為具體的值

示例:需求:五子棋盤對映為乙個二維陣列,將此二維陣列儲存到乙個稀疏陣列內,存入磁碟並讀取再轉化為二維陣列

** **實現

public

class

sparsetest}}

//定義對應稀疏陣列,將二維陣列不為0的資料存入

int[

] sparsearr=

newint

[sum+1]

[3];

sparsearr[0]

[0]=arr.length;

sparsearr[0]

[1]=arr[0]

.length;

sparsearr[0]

[2]=sum;

int count=0;

// 記錄第i個非0數

for(

int i =

0; i < arr.length; i++)}

}//將稀疏陣列寫入磁碟,採用物件序列化的方式

file file=

newfile

("d:\\1.txt");

objectoutputstream out=

newobjectoutputstream

(new

fileoutputstream

(file));

out.

writeobject

(sparsearr)

; out.

close()

;//從磁碟將稀疏陣列反序列化

objectinputstream in=

newobjectinputstream

(new

fileinputstream

(file));

int[

] newsparsearr =

(int

) in.

readobject()

;//將新的稀疏陣列轉化為二維陣列並驗證結果

int[

] newarr=

newint

[newsparsearr[0]

[0]]

[newsparsearr[0]

[1]]

;for

(int i =

1; i < sparsearr.length; i++

) system.out.

println

(arrays.

deeptostring

(newarr));

}}

一種有序列表,可以用陣列和鍊錶來實現,特點:先存入的先取出,後存入的後取出

** 示例(陣列模擬環形佇列)

package myqueue;

//陣列模擬環形佇列

@suppresswarnings

("all"

)public

class

roundqueue

//判斷佇列是否已滿

public

boolean

isfull()

//判斷佇列是否為空

public

boolean

isempty()

//向佇列新增資料

public

void

addroundqueue

(int data)

arr[rear]

=data;

rear=

(rear+1)

%maxsize;

system.out.

println

("新增了 "

+data);}

//從佇列取出資料

public

void

getroundqueue()

int data=arr[front]

; front=

(front+1)

%maxsize;

system.out.

println

("取出得資料為 "

+data);}

//顯示佇列全部資料

public

void

showroundqueue()

//迴圈展示佇列資料,從頭位置迴圈到尾部位置

// 因為是環形佇列,所以獲取下標時需要通過取模進行限制,底層是陣列,防止下標越界

// 並且在尾部後乙個位置已經到佇列尾部的時候,如果陣列前面有位置可以存,取模可以將空位移到

//開始位置

for(

int i = front; i (rear-front+maxsize)

%maxsize ; i++)}

//顯示佇列頭部資料

public

void

peep()

system.out.

println

(arr[front]);

}}** 測試

public

class

queuetest

catch

(exception e)

break

;case

"h":

trycatch

(exception e)

break

;case

"a":

system.out.

println

("請輸入新增資料");

arrayqueue.

addqueue

(scanner.

nextint()

);break

;case

"g":

trycatch

(exception e)

break

;case

"e":

flag=

false

;break

;default

:break;}

}}}*

* 無法迴圈重複利用的佇列實現(測試同上)

package myqueue;

//陣列模擬佇列

public

class

arrayqueue

//判斷佇列是否為空

public

boolean

isempty()

//判斷佇列是否已滿

public

boolean

isfull()

//向佇列內新增資料

public

void

addqueue

(int dada)

rear++

; arrqueue[rear]

=dada;

system.out.

println

("存入佇列資料為 "

+dada);}

//從佇列內取出資料

public

void

getqueue()

front++

; system.out.

println

("取出的資料為 "

+arrqueue[front]);

}//檢視佇列全部資料

public

void

showqueue()

for(

int i : arrqueue)

}//檢視佇列頭部資料

public

void

peep()

system.out.

println

("佇列頭資料為 "

+arrqueue[front+1]

);}}

資料結構演算法爬坑日記六

回溯法 也叫向前試探法,試著尋找正確的求解,當探索到某一步不符合規則時,便回退到上一步進行重新選擇,直到獲取預期的解法 問題描述 在8 8的西洋棋棋盤上,放置八個皇后且八個皇后不能互相攻擊 思路 先將第乙個放在第一行第一列,然後將第二個放在第二行第一列,檢查是否滿足規則,如果滿足則進入第三個的放 置...

資料結構演算法爬坑日記八

思想 通過一次排序將一組資料分為兩部分,一部分全部比另一部分小,然後對兩部分分別再進行快排,迴圈此操作,直到不能再分割,便得到乙個有序序列 實現 快速排序 public class quicksort sort arr,0,arr.length 1 system.out.println arrays...

資料結構演算法爬坑日記十

雜湊表 也叫雜湊表,通過將關鍵碼值對映到表中的乙個位置來訪問,加快查詢的速度,對映函式也叫雜湊函式,存放記錄的陣列叫雜湊表,在對一些不常改變的資料進行操作的時候,為了加快速度,通常會採用快取技術將其載入 到記憶體中進行操作,而不直接對資料庫進行操作,如redis,雜湊表就相當於乙個簡化版redis,...