是解決問題的一種具體,清晰的描述,是程式解決問題的清楚指令。
演算法代表著用系統的方法描述解決問題的策略機制。也就是說,能夠對一定規範的輸入,在有限時間內獲得所要求的輸出。
如果乙個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。
不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。
乙個演算法的優劣可以用空間複雜度與時間複雜度來衡量。
資料結構是資料儲存和資料組織的方式,是值乙個或多個資料元素之間的結構關係。
線性結構,樹形結構,圖形結構,集合結構。
表、陣列、堆疊、佇列、樹、二叉樹、圖。
資料結構中的一種線性表現,即線性儲存資料的形式展現。
順序儲存結構,鍊錶儲存結構
應用:陣列,鏈式結構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 棧的抽象資料型...