js數據結構與算法存儲結構


數據結構(程序設計=數據結構+算法)

數據結構就是關系,沒錯,就是數據元素相互之間存在的一種或多種特定關系的集合。

傳統上,我們把數據結構分為邏輯結構和物理結構。

邏輯結構:是指數據對象中數據元素之間的相互關系,也是我們今后最需要關注和討論的問題。

物理結構:是指數據的邏輯結構在計算機中的存儲形式。

常用的數據結構有:

數組,隊列(queue),堆(heap),棧(stack),鏈表(linked list ),樹(tree),圖(graph)和散列表(hash) 

棧(stack):運算只在表的一端進行;隊列(Queue):運算只在表的兩端進行。

隊列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。

與棧相反,隊列是一種先進先出(First In First Out, FIFO)的線性表。

與棧相同的是,隊列也是一種重要的線性結構,實現一個隊列同樣需要順序表或鏈表作為基礎。

四大結構

集合結構
%E9%9B%86%E5%90%88%E7%BB%93%E6%9E%84.jpg

線性結構
%E7%BA%BF%E6%80%A7%E7%BB%93%E6%9E%84.jpg

樹形結構
%E6%A0%91%E5%BD%A2%E7%BB%93%E6%9E%84.jpg

圖形結構

順序存儲和鏈式存儲

數據元素的存儲結構形式有兩種:順序存儲和鏈式存儲。
例如我們編程語言的數組結構就是這樣滴。
%E9%A1%BA%E5%BA%8F%E5%AD%98%E5%82%A8%E7%BB%93%E6%9E%84.jpg

鏈式存儲結構:是把數據元素存放在任意的存儲單元里,這組存儲單元可以是連續的,也可以是不連續的。

鏈式存儲結構
%E9%93%BE%E5%BC%8F%E5%AD%98%E5%82%A8%E7%BB%93%E6%9E%84.jpg


線性表

線性表:就好像是排隊一樣,具有線一樣性質的結構,它是由零個或多個數據元素組成的有限序列。

若元素存在多個,則第一個元素無前驅,而最后一個元素無后繼,其他元素都有且只有一個前驅和后繼。

若將線性表記為(a1,…,ai-1,ai,ai+1,…an),則表中ai-1領先於ai,ai領先於ai+1,稱ai-1是ai的直接前驅元素,ai+1是ai的直接后繼元素。

%E5%9B%BE%E7%89%8731.jpg

數據類型

數據類型:是指一組性質相同的值的集合及定義在此集合上的一些操作的總稱。

例如很多編程語言的整型,浮點型,字符型這些指的就是數據類型。

在計算機中,內存不是無限大的,如果要計算或處理一些較大的數時,需要開辟較大的內存空間,於是就要對計算機進行數據類型分類,分出多種數據類型來適合各種不同的計算條件差異。

在C語言中,數據類型可以分為:

原子類型:不可以再分解的基本類型,例如整型、浮點型、字符型等。

結構類型:由若干個類型組合而成,是可以再分解的,例如整型數組是由若干整型數據組成的。

算法

算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示一個或多個操作。

算法具有五個基本特征:輸入、輸出、有窮性、確定性和可行性。

輸出:算法至少有一個或多個輸出。
有窮性:指算法在執行有限的步驟之后,自動結束而不會出現無限循環,並且每一個步驟在可接受的時間內完成。

確定性:算法的每一個步驟都具有確定的含義,不會出現二義性。

可行性:算法的每一步都必須是可行的,也就是說,每一步都能夠通過執行有限次數完成。

正確性:算法的正確性是指算法至少應該具有輸入、輸出和加工處理無歧義性、能正確反映問題的需求、能夠得到問題的正確答案。

高級語言編寫的程序在計算機上運行時所消耗的時間取決於下列因素:

1. 算法采用的策略,方案 2. 編譯產生的代碼質量 3. 問題的輸入規模 4. 機器執行指令的速度 

我們可以想象,線性表有兩種物理存儲結構:順序存儲結構和鏈式存儲結構。

線性表的順序存儲結構,指的是用一段地址連續的存儲單元依次存儲線性表的數據元素。

線性表(a1,a2,…,an)的順序存儲如下:

%E5%9B%BE%E7%89%871.png

線性表順序存儲的結構

#define MAXSIZE 20 typedef int ElemType; typedef struct { ElemType data[MAXSIZE]; int length; // 線性表當前長度 } SqList; 

總結下,順序存儲結構封裝需要三個屬性:

存儲空間的起始位置,數組data,它的存儲位置就是線性表存儲空間的存儲位置。

線性表的最大存儲容量:數組的長度MaxSize。

線性表的當前長度:length。

插入算法的思路

    如果插入位置不合理,拋出異常;

    如果線性表長度大於等於數組長度,則拋出異常或動態增加數組容量;

    從最后一個元素開始向前遍歷到第i個位置,分別將它們都向后移動一個位置;

    將要插入元素填入位置i處;

    線性表長+1。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM