資料結構
線性資料: 線性表*、棧、佇列、串、陣列和檔案;
非線性資料: 雜湊表、樹和圖;
線性資料
array
就是陣列,高效;但是其容量固定且無法動態改變,需要處理的元素數量確定並且需要使用下標進行訪問時可以考慮,不過建議使用list。
arraylist
容量可動態增長;但犧牲效率,基於效率和型別檢驗,應盡可能使用array,無法確定陣列大小時才使用arraylist!,不推薦使用,建議使用泛型list。
泛型list
需要處理的元素數量不確定時,通常建議使用。
liskedlist
鍊錶適合元素數量不固定,而且需要經常增減節點的情況,鍊錶增減元素效率高。
queue
佇列適合於先進先出的情況。
stack
堆疊適合於先進後出的情況。
dictionary
相當於js中的map,字典適合於需要鍵值對操作的情況。
常用集合
堆疊stack
、stack
,堆疊的特點是後進先出(lifo, last in first out)。
佇列queue
、queue
,佇列的特點是先進先出(fifo, first in first out)。
可排序鍵值對:特點是插入、檢索沒有雜湊表集合高效
set
集合:特點是無序、不重複。
雙向鍊錶集合:linkedlist
特點是增刪速度快
alltop_click~default-1-88398205.nonecase&utm_term=c#%e4%b8%ad%e5%ad%98%e5%82%a8%e6%95%b0%e6%8d%ae%e7%bb%93%e6%9e%84&spm=1000.2123.3001.4430
c#基本資料型別
js中3種常見的集合
1.array陣列
建立乙個陣列,有三種方法:
1: 常規方式:
var mycars=new array();
mycars[0]="saab";
mycars[1]="volvo";
mycars[2]="bmw";
2: 使用 array 建構函式方式:
var arr1 = new array(); //建立乙個空陣列
var arr2 = new array(20); // 建立乙個包含20項的陣列
var arr3 = new array("lily","lucy","tom"); // 建立乙個包含3個字串的陣列
3: 字面方式:
var arr4 = ; //建立乙個空陣列
var arr5 = [20]; // 建立乙個包含1項的陣列
var arr6 = ["lily","lucy","tom"]; // 建立乙個包含3個字串的陣列
2.map集合(儲存的是鍵值對的形式,具有極快的查詢速度.初始化map需要乙個二維陣列,或者直接初始化乙個空map。)js鍵值對;;類似於物件的屬性;;通過鍵來對映,對映
new map([iterable])
引數 iterable 可以是乙個陣列或者其他 iterable 物件,其元素或為鍵值對,或為兩個元素的陣列。 每個鍵值對都會新增到新的 map。null 會被當做 undefined。
var kvarray = [["key1", "value1"], ["key2", "value2"]];
// 使用對映物件常規的建構函式將乙個二維鍵值對陣列物件轉換成乙個對映關係
var mymap = new map(kvarray);
mymap.get("key1"); // 返回值為 "value1"
var m = new map(); // 空map <--或初始化賦值var m = new map([['adam', 67], ['bob', 59]])-->;
m.set('adam', 67); // 新增新的key-value
m.set('bob', 59);
此時m內部為:m= ([['adam', 67], ['bob', 59]]);
m.has('adam'); // 是否存在key 'adam': true
m.get('adam'); // 67
m.delete('adam'); // 刪除key 'adam'
m.get('adam'); // undefined
3.set集合(儲存的元素是有序不重複的,建立乙個set,需要提供乙個陣列作為輸入,或者直接建立乙個空set)公升級版陣列,效能怪獸
作用:陣列去重;兩個陣列並集;相對於陣列,效能更強更快(把陣列套在set集合裡在操作更快!!!!!!!!)
查詢元素: set 比陣列快了 7.54 倍
刪除元素: set 比陣列快了 74.13 倍
插入元素: set 比陣列快了 6.73 倍
去重: set 物件僅能儲存不同的值。如果你想避免儲存重複的值,這會比陣列具有更大的優勢。在陣列中你需要一些額外的**來做去重。
var s1 = new set(); // 空set
var s2 = new set([1, 2, 3,'3']); // 含1, 2, 3,'3'
s2.add(4);
s2; // set
s2.add(3);//可以重複新增,但不會有效果
s2; // 仍然是 set ,
s2.delete(3);
s2;//set
***通過set進行陣列去重,包含set轉陣列,以及陣列轉set的基礎操作。
var arr=[1,2,1,2,3];
console.log("初始陣列:"+arr);
var s=new set(arr);//作用:建立兩個陣列的並集或陣列去重
console.log(s);
var arr2=array.from(s);
console.log("去重後的陣列:"+arr2);
演算法與資料結構基礎知識
計算機要工作,首先要有資料,資料就是計算機加工和處理的物件 簡單的分類一下,資料分為數值資料和非數值資料 數值資料主要應用於工程和科學計算 而非數值資料,比如聲音,影象等在計算機中是以二進位制形式存放在物理介質上。每個二進位制位為乙個bit,8個二進位制位為乙個byte 位元組 要談資料結構,就必須...
資料結構基礎知識
時間複雜度和空間複雜度 同一問題可用不同演算法解決,而乙個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。乙個演算法的評價主要從時間複雜度和空間複雜度來考慮。1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測...
資料結構基礎知識
一種資料的邏輯結根據需要可以表示成多種儲存結構,常用的儲存結構有順序儲存 鏈結儲存 索引儲存等,採用不同的資料結構,其資料處理的效率是不同的。線性表是一種常用的資料結構。在實際應用中,線性表都是以棧 佇列 字串 陣列等特殊線性表的形式來使用的。線性表是一種線性結構。線性表有順序儲存結構和鏈式儲存結構...