微網(wǎng)站制作軟件線上線下整合營銷方案
前言:
? ? 數(shù)據(jù)結(jié)構(gòu)是計算存儲,組織數(shù)據(jù)的方式。數(shù)據(jù)結(jié)構(gòu)是指相互間存在一種或多種特定關系的數(shù)據(jù)元素的集合。通常情況下,精心選擇的數(shù)據(jù)結(jié)構(gòu)可以帶來更高的運行或者存儲效率。數(shù)據(jù)結(jié)構(gòu)往往同高效的檢索算法和索引技術(shù)有關。
Data Structure Visualization? 數(shù)據(jù)結(jié)構(gòu)可演示線上地址
一.線性結(jié)構(gòu)
1.1? 數(shù)組
? ? ?數(shù)組(Array)是一種線性表數(shù)據(jù)結(jié)構(gòu)。它用于存儲固定大小的相同類型的數(shù)據(jù)元素。在數(shù)組中,數(shù)據(jù)元素按照有序的方式進行排列,可以通過索引訪問數(shù)組中的任意位置的元素。
//動態(tài)初始化:初始化時由程序員指定數(shù)組長度,由系統(tǒng)為數(shù)組元素分配初始值
char c1[] = new char[5];//靜態(tài)初始化:初始化由程序員顯示指定每個數(shù)組的初始值,由系統(tǒng)決定數(shù)組的長度
char c2[] = new char[]{'A','B','C'};
char c3[] = {'D','E','E','U'}
數(shù)組的特點:
- 順序存儲:數(shù)組中的元素按照順序存儲在內(nèi)存空間中,每個元素都有一個唯一的索引,可以通過索引快速訪問。
- 大小固定:一旦定義了數(shù)組的大小,就不能改變。如果需要更大的存儲空間,需要重新定義一個新的數(shù)組。
- 元素類型相同:數(shù)組中的所有元素必須是相同的類型。
- 無界數(shù)組:數(shù)組的長度可以是任意的整數(shù),只要內(nèi)存空間足夠。
數(shù)組優(yōu)點:
? ? ?1.訪問速度快:由于數(shù)組是順序存儲,可以通過索引直接訪問數(shù)組中的元素,復雜度為O(1)
? ? ?2.易于實現(xiàn):數(shù)組是一種簡單的數(shù)據(jù)結(jié)構(gòu),容易實現(xiàn)和操作
數(shù)組缺點:
? ? ?1.大小固定:數(shù)組大小固定,不能動態(tài)擴展。如果需要更多的存儲空間,需要重新定義一個新的數(shù)組,會增加額外的開銷。
? ? ?2.空間利用率低:由于數(shù)組是連續(xù)的的內(nèi)存空間,即使某些位置沒有被使用,也不能被其他數(shù)據(jù)結(jié)構(gòu)使用,導致空間利用率較低。
1.2? 隊列
? ? ?隊列是一種特殊的數(shù)據(jù)結(jié)構(gòu),其特點是先進先出(FIFO)原則。隊列中的原色只能從一端(隊尾)加入,隊頭 刪除
? ? ?隊列特點:
? ? ? ?1.先進先出:隊列中的元素遵守先進先出的原則,即最早進入的最先被刪除。
? ? ? ?2.插入和刪除發(fā)生在兩端:插入在隊尾,刪除在隊頭。
? ? ? ?3.無界隊列:隊列的長度可以是任意整數(shù),只要內(nèi)存空間夠。

public static void main(String[] args) {Queue<Integer> queue = new LinkedList<>();queue.add(1);queue.add(2);queue.add(3);System.out.println("隊列:" + queue);//隊列:[1, 2, 3]System.out.println("訪問隊列頭:" + queue.peek());//訪問隊列頭:1System.out.println("隊列:" + queue);//隊列:[1, 2, 3]System.out.println("刪除隊列頭:" + queue.poll());//刪除隊列頭:1System.out.println("隊列:" + queue);//隊列:[2, 3]}
1.3? 鏈表
? ? 鏈表是一種常見的數(shù)據(jù)結(jié)構(gòu),通過指針將一組零散的內(nèi)存塊串聯(lián)在一起。鏈表中的每個內(nèi)存塊被稱為節(jié)點,每個節(jié)點除了存儲數(shù)據(jù)外,還需要記錄鏈上的下一個節(jié)點的地址。
? ? 特點:
? ? ? 1.不需要連續(xù)的內(nèi)存空間
? ? ? 2.有指針引用
? ? ? 3.插入/刪除數(shù)據(jù)效率高,時間復雜度O(1) [只需要更改指針指向即可];但是,隨機訪問效率低,時間復雜度O(n) 級別[需要從鏈頭至鏈尾進行遍歷]
? ? ? 4.和數(shù)組相比,內(nèi)存空間消耗更大,因為每個存儲數(shù)據(jù)的節(jié)點都需要額外的空間存儲后繼指針。
? ? 鏈表包括 單向鏈表 ,雙向鏈表和循環(huán)鏈表等類型。其中
? ? ? ? ? ? ? 單向鏈表的節(jié)點只有一個后繼指針next指向后面的節(jié)點;
? ? ? ? ? ? ? 雙向鏈表的節(jié)點除了有一個后繼指針next指向后面的節(jié)點,還有一個前驅(qū)指針prev指向前面節(jié)點
? ? ? ? ? ? ?循環(huán)鏈表:與單向鏈表區(qū)別是尾節(jié)點的指針指向投節(jié)點,形成一個環(huán)
1.4? 棧
? ? ?棧(stack)是一種后進先出(LIFO)的數(shù)據(jù)結(jié)構(gòu),它只能在一端進行插入和刪除操作,這一端被稱為棧頂,另外一端被稱為棧底。棧的元素之間存在一種順序關系,這種順序關系由元素的插入和刪除決定。
? ? 棧的主要操作:
? ? ? ?1.入棧(push)
? ? ? ?2.出棧(pop):
? ? ? ?3.判斷???#xff08;is_empty)
? ? ? ?4.獲取棧頂元素(top)