資料結構與演算法簡介 線性表和應用

2021-09-09 05:33:13 字數 3393 閱讀 7631

是解決問題的一種具體,清晰的描述,是程式解決問題的清楚指令。

演算法代表著用系統的方法描述解決問題的策略機制。也就是說,能夠對一定規範的輸入,在有限時間內獲得所要求的輸出。

如果乙個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。

不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。

乙個演算法的優劣可以用空間複雜度與時間複雜度來衡量。

資料結構是資料儲存和資料組織的方式,是值乙個或多個資料元素之間的結構關係。

線性結構,樹形結構,圖形結構,集合結構。

表、陣列、堆疊、佇列、樹、二叉樹、圖。

資料結構中的一種線性表現,即線性儲存資料的形式展現。

順序儲存結構,鍊錶儲存結構

應用:陣列,鏈式結構linklist等

優點:查詢方便,支援隨機訪問,尾部插入方便  儲存空間利用率高

缺點:中間插入麻煩,刪除麻煩

將資料線性儲存。經典的例子就是陣列和arraylist

public class exampleunittest 

@test

public void testswap()

public int testsreach(int array, int des)

}return -1;

}@test

public void testcards();

// arrays.sort(array);//100行以上

bubblesort(array);

for (cards cards : array)

}@test

public void testsort();

for (int i : array)

system.out.println("\n");

// bubblesort(array);

selectsort(array);

for (int i : array)

}public static void bubblesort(int array)

}if(flag)}}

public static void bubblesort(cards array)

}if(flag)}}

public static void selectsort(int array)else if(this.cardpointsc.pokercolors)else if(this.pokercolors分為雙向鍊錶和單向鍊錶

缺點:儲存空間利用率低,分兩部分儲存,占用空間多

優點:增加方便,刪除方便

建立鍊錶code:

public class linkedlist

}public linkedlist()

//頭節點

nodefirst;

//尾節點

nodelast;

//大小

int size;

/*** 新增資料在最後

*/public void add(e e)

/*** 新增到最後

* @param e

*/private void linklast(e e) else

size++;

}/**

* 查詢位置

*/public e get(int index)

return node(index).item;

}/**

* 獲取index位置上的節點

*/private nodenode(int index)

return node;

}else

return node;}}

/*** 新增資料在index位置

*/public void add(int index,e e)

if(index==size)elseelse

size++;}}

/*** 刪除元素

*/public void remove(int index)

private void unlinknode(nodep) else

if(next==null)else

size--;}}

兩個結合的例子就是hashtable  因為資料過大,鍊錶就不好用了所以 jdk1.8之後的大改版,設定了閾值,超過一定數量就應用紅黑樹儲存。以後再會介紹。

hashtable如下圖:

紅黑樹如下圖:

鏈式排序相關:

鏈式基數排序。

適用:資料量小,插入過多時如麻將問題。

建立麻將物件類:

public class mahjong 

@override

public string tostring()

}

排序:

public static void radixsort(linkedlistlist)

//把資料乙個個放到對應的組中

while(list.size()>0)

//把9組合並在一起

for (int i = 0; i < ranklist.length; i++)

//先花色進行分組

linkedlist suitlist=new linkedlist[3];

for (int i = 0; i < suitlist.length; i++)

//把資料乙個個放到對應的組中

while(list.size()>0)

//把3個組合到一起

for (int i = 0; i < suitlist.length; i++)

}

測試dome

@test

public void addition_iscorrect() throws exception

資料結構 線性表演算法

1.線性表 線性表是n個具有相同特性的資料元素的有限序列。線性表的主要儲存結構 順序儲存結構 順序表 鏈式儲存結構 鍊錶 2.順序儲存 儲存空間連續,用一組連續的儲存單元依次存放資料元素 即邏輯上相鄰的元素,其物理位置也相鄰。優點 隨機訪問 缺點 插入刪除結點困難 擴充套件不靈活 3.鏈式儲存 儲存...

《資料結構與演算法》 表 棧和佇列(線性表的應用)

合併線性表 status list union sqlistptr la,sqlistptr lb else list add la,j,1 return status 時間複雜度 list size 順序儲存o 1 鏈式儲存o n list retrieve 順序儲存o 1 鏈式儲存o n lis...

資料結構與演算法 線性表

概念 一種資料結構,每個結點最多只有乙個前驅結點和乙個後繼結點 類別 順序表 定長 鍊錶 變長 棧 棧頂刪除 彈棧 棧頂插入 壓棧 後進先出 lifo 佇列 隊頭刪除 出隊 隊尾插入 入隊 先進先出 fifo 線性表的抽象資料型別定義 c 1.template2.class list 棧的抽象資料型...