導航:首頁 > 源碼編譯 > 圖形結構演算法

圖形結構演算法

發布時間:2023-02-14 19:04:47

① 什麼是演算法與數據結構

演算法(Algorithm)是一系列解決問題的清晰指令,也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用空間復雜度與時間復雜度來衡量。
演算法可以理解為有基本運算及規定的運算順序所構成的完整的解題步驟。或者看成按照要求設計好的有限的確切的計算序列,並且這樣的步驟和序列可以解決一類問題。
一個演算法應該具有以下五個重要的特徵:
1、有窮性: 一個演算法必須保證執行有限步之後結束;
2、確切性: 演算法的每一步驟必須有確切的定義;
3、輸入:一個演算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指演算法本身定除了初始條件;
4、輸出:一個演算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒有輸出的演算法是毫無意義的;
5、可行性: 演算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算後即可完成。
計算機科學家尼克勞斯-沃思曾著過一本著名的書《數據結構十演算法= 程序》,可見演算法在計算機科學界與計算機應用界的地位。

數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關系的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索演算法和索引技術有關。
一般認為,一個數據結構是由數據元素依據某種邏輯聯系組織起來的。對數據元素間邏輯關系的描述稱為數據的邏輯結構;數據必須在計算機內存儲,數據的存儲結構是數據結構的實現形式,是其在計算機內的表示;此外討論一個數據結構必須同時討論在該類數據上執行的運算才有意義。
在許多類型的程序的設計中,數據結構的選擇是一個基本的設計考慮因素。許多大型系統的構造經驗表明,系統實現的困難程度和系統構造的質量都嚴重的依賴於是否選擇了最優的數據結構。許多時候,確定了數據結構後,演算法就容易得到了。有些時候事情也會反過來,我們根據特定演算法來選擇數據結構與之適應。不論哪種情況,選擇合適的數據結構都是非常重要的。
選擇了數據結構,演算法也隨之確定,是數據而不是演算法是系統構造的關鍵因素。這種洞見導致了許多種軟體設計方法和程序設計語言的出現,面向對象的程序設計語言就是其中之一。
在計算機科學中,數據結構是一門研究非數值計算的程序設計問題中計算機的操作對象(數據元素)以及它們之間的關系和運算等的學科,而且確保經過這些運算後所得到的新結構仍然是原來的結構類型。
「數據結構」作為一門獨立的課程在國外是從1968年才開始設立的。 1968年美國唐·歐·克努特教授開創了數據結構的最初體系,他所著的《計算機程序設計技巧》第一卷《基本演算法》是第一本較系統地闡述數據的邏輯結構和存儲結構及其操作的著作。「數據結構」在計算機科學中是一門綜合性的專業基礎課。數據結構是介於數學、計算機硬體和計算機軟體三者之間的一門核心課程。數據結構這一門課的內容不僅是一般程序設計(特別是非數值性程序設計)的基礎,而且是設計和實現編譯程序、操作系統、資料庫系統及其他系統程序的重要基礎。
計算機是一門研究用計算機進行信息表示和處理的科學。這裡面涉及到兩個問題:
信息的表示
信息的處理
而信息的表示和組又直接關繫到處理信息的程序的效率。隨著計算機的普及,信息量的增加,信息范圍的拓寬,使許多系統程序和應用程序的規模很大,結構又相當復雜。因此,為了編寫出一個「好」的程序,必須分析待處理的對象的特徵及各對象之間存在的關系,這就是數據結構這門課所要研究的問題。眾所周知,計算機的程序是對信息進行加工處理。在大多數情況下,這些信息並不是沒有組織,信息(數據)之間往往具有重要的結構關系,這就是數據結構的內容。數據的結構,直接影響演算法的選擇和效率。
計算機解決一個具體問題時,大致需要經過下列幾個步驟:首先要從具體問題中抽象出一個適當的數學模型,然後設計一個解此數學模型的演算法(Algorithm),最後編出程序、進行測試、調整直至得到最終解答。尋求數學模型的實質是分析問題,從中提取操作的對象,並找出這些操作對象之間含有的關系,然後用數學的語言加以描述。計算機演算法與數據的結構密切相關,演算法無不依附於具體的數據結構,數據結構直接關繫到演算法的選擇和效率。運算是由計算機來完成,這就要設計相應的插入、刪除和修改的演算法 。也就是說,數據結構還需要給出每種結構類型所定義的各種運算的演算法。
數據是對客觀事物的符號表示,在計算機科學中是指所有能輸入到計算機中並由計算機程序處理的符號的總稱。
數據元素是數據的基本單位,在計算機程序中通常作為一個整體考慮。一個數據元素由若干個數據項組成。數據項是數據的不可分割的最小單位。有兩類數據元素:一類是不可分割的原子型數據元素,如:整數"5",字元 "N" 等;另一類是由多個款項構成的數據元素,其中每個款項被稱為一個數據項。例如描述一個學生的信息的數據元素可由下列6個數據項組成。其中的出身日期又可以由三個數據項:"年"、"月"和"日"組成,則稱"出身日期"為組合項,而其它不可分割的數據項為原子項。
關鍵字指的是能識別一個或多個數據元素的數據項。若能起唯一識別作用,則稱之為 "主" 關鍵字,否則稱之為 "次" 關鍵字。
數據對象是性質相同的數據元素的集合,是數據的一個子集。數據對象可以是有限的,也可以是無限的。
數據處理是指對數據進行查找、插入、刪除、合並、排序、統計以及簡單計算等的操作過程。在早期,計算機主要用於科學和工程計算,進入八十年代以後,計算機主要用於數據處理。據有關統計資料表明,現在計算機用於數據處理的時間比例達到80%以上,隨著時間的推移和計算機應用的進一步普及,計算機用於數據處理的時間比例必將進一步增大。
數據結構是指同一數據元素類中各數據元素之間存在的關系。數據結構分別為邏輯結構、存儲結構(物理結構)和數據的運算。數據的邏輯結構是對數據之間關系的描述,有時就把邏輯結構簡稱為數據結構。邏輯結構形式地定義為(K,R)(或(D,S)),其中,K是數據元素的有限集,R是K上的關系的有限集。
數據元素相互之間的關系稱為結構。有四類基本結構:集合、線性結構、樹形結構、圖狀結構(網狀結構)。樹形結構和圖形結構全稱為非線性結構。集合結構中的數據元素除了同屬於一種類型外,別無其它關系。線性結構中元素之間存在一對一關系,樹形結構中元素之間存在一對多關系,圖形結構中元素之間存在多對多關系。在圖形結構中每個結點的前驅結點數和後續結點數可以任意多個。
數據結構在計算機中的表示(映像)稱為數據的物理(存儲)結構。它包括數據元素的表示和關系的表示。數據元素之間的關系有兩種不同的表示方法:順序映象和非順序映象,並由此得到兩種不同的存儲結構:順序存儲結構和鏈式存儲結構。順序存儲方法:它是把邏輯上相鄰的結點存儲在物理位置相鄰的存儲單元里,結點間的邏輯關系由存儲單元的鄰接關系來體現,由此得到的存儲表示稱為順序存儲結構。順序存儲結構是一種最基本的存儲表示方法,通常藉助於程序設計語言中的數組來實現。鏈接存儲方法:它不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關系是由附加的指針欄位表示的。由此得到的存儲表示稱為鏈式存儲結構,鏈式存儲結構通常藉助於程序設計語言中的指針類型來實現。索引存儲方法:除建立存儲結點信息外,還建立附加的索引表來標識結點的地址。散列存儲方法:就是根據結點的關鍵字直接計算出該結點的存儲地址。
數據結構中,邏輯上(邏輯結構:數據元素之間的邏輯關系)可以把數據結構分成線性結構和非線性結構。線性結構的順序存儲結構是一種隨機存取的存儲結構,線性表的鏈式存儲結構是一種順序存取的存儲結構。線性表若採用鏈式存儲表示時所有結點之間的存儲單元地址可連續可不連續。邏輯結構與數據元素本身的形式、內容、相對位置、所含結點個數都無關。
演算法的設計取決於數據(邏輯)結構,而演算法的實現依賴於採用的存儲結構。數據的運算是在數據的邏輯結構上定義的操作演算法,如檢索、插入、刪除、更新的排序等。

② 數據結構哪些是四種常見的邏輯結構

四種常見的邏輯結構:

1、集合結構

數據結構中的元素之間除了「同屬一個集合」 的相互關系外,別無其他關系;

2、線性結構

數據結構中的元素存在一對一的相互關系

3、樹形結構

數據結構中的元素存在一對多的相互關系

4、圖形結構

數據結構中的元素存在多對多的相互關系

(2)圖形結構演算法擴展閱讀:

數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關系的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索演算法和索引技術有關。

數據的邏輯結構:指反映數據元素之間的邏輯關系的數據結構,其中的邏輯關系是指數據元素之間的前後件關系,而與他們在計算機中的存儲位置無關。

數據的物理結構是數據結構在計算機中的表示(又稱映像),它包括數據元素的機內表示和關系的機內表示。由於具體實現的方法有順序、鏈接、索引、散列等多種,所以,一種數據結構可表示成一種或多種存儲結構。

③ 數據結構有哪幾種

問題一:數據結構 都有哪些結構 常用數據結構
數組 (Array)
在程序設計中,為了處理方便, 把具有相同類型的若干變數按有序的形式組織起來。這些按序排列的同類數據元素的 *** 稱為數組。在C語言中, 數組屬於構造數據類型。一個數組可以分解為多個數組元素,這些數組元素可以是基本數據類型或是構造類型。因此按數組元素的類型不同,數組又可分為數值數組、字元數組、指針數組、結構數組等各種類別。
棧 (Stack)
是只能在某一端插入和刪除的特殊線性表。它按照後進先出的原則存儲數據,先進入的數據被壓入棧底,最後的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最後一個數據被第一個讀出來)。
隊列 (Queue)
一種特殊的線性表,它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。隊列中沒有元素時,稱為空隊列。
鏈表 (Linked List)
是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。鏈表由一系列結點(鏈表中每一個元素稱為結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。
樹 (Tree)
是包含n(n>0)個結點的有窮 *** K,且在K中定義了一個關系N,N滿足 以下條件:
(1)有且僅有一個結點 k0,他對於關系N來說沒有前驅,稱K0為樹的根結點。簡稱為根(root)。 (2)除K0外,k中的每個結點,對於關系N來說有且僅有一個前驅。
(3)K中各結點,對戶系N來說可以有m個後繼(m>=0)。
圖 (Graph)
圖是由結點的有窮 *** V和邊的 *** E組成。其中,為了與樹形結構加以區別,在圖結構中常常將結點稱為頂點,邊是頂點的有序偶對,若兩個頂點之間存在一條邊,就表示這兩個頂點具有相鄰關系。
堆 (Heap)
在計算機科學中,堆是一種特殊的樹形數據結構,每個結點都有一個值。通常我們所說的堆的數據結構,是指二叉堆。堆的特點是根結點的值最小(或最大),且根結點的兩個子樹也是一個堆。
散列表 (Hash)
若結構中存在關鍵字和K相等的記錄,則必定在f(K)的存儲位置上。由此,不需比較便可直接取得所查記錄。稱這個對應關系f為散列函數(Hash function),按這個思想建立的表為散列表。

問題二:常用的數據結構有哪幾種 數據元素相互之間的關系稱為結構。有四類基本結構: *** 、線性結構、樹形結構、圖狀結構;
*** 結構:除了同屬於一種類型外,別無其它關系
線性結構:元素之間存在一對一關系常見類型有: 數組,鏈表,隊列,棧,它們之間在操作上有所區別.例如:鏈表可在任意位置插入或刪除元素,而隊列在隊尾插入元素,隊頭刪除元素,棧只能在棧頂進行插
入,刪除操作.
樹形結構:元素之間存在一對多關系,常見類型有:樹(有許多特例:二叉樹、平衡二叉樹、查找樹等)
圖形結構:元素之間存在多對多關系,圖形結構中每個結點的前驅結點數和後續結點多個數可以任意

問題三:數據結構包括哪幾種基本結構,各有什麼特點 1、評價一個演算法時間性能的主要標準是(演算法的時間復雜度)。
2、演算法的時間復雜度與問題的規模有關外,還與輸入實例的(初始狀態)有關。
3、一般,將演算法求解問題的輸入量稱為(問題的規模)。
4、在選擇演算法時,除首先考慮正確性外,還應考慮哪三點?
答:選用的演算法首先應該是正確的。此外,主要考慮如下三點:① 執行演算法所耗費的時間;② 執行演算法所耗費的存儲空間,其中主要考慮輔助存儲空間;③ 演算法應易於理解,易於編碼,易於調試等等。
6、下列四種排序方法中,不穩定的方法是(D )
A、直接插入排序B、冒泡排序C、歸並排序D、直接選擇排序
7、按增長率由小至大的順序排列下列各函數:
2100, (3/2)n,(2/3)n,nn ,n0.5 , n! ,2n ,lgn ,nlgn, n3/2

問題四:數據結構都有哪些分類呢? 根據數據元素間關系的不同特性,將數據結構常分為下列四類基本的結構:
⑴ *** 結構。該結構的數據元素間的關系是「屬於同一個 *** 」。
⑵線性結構。該結構的數據元素之間存在著一對一的關系。
⑶樹型結構。該結構的數據元素之間存在著一對多的關系。
⑷圖形結構。該結構的數據元素之間存在著多對多的關系,也稱網狀結構。
數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關系的數據元素的 *** 。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。

問題五:數據結構哪三種 有三種類型:分別是概念數據模型、邏輯數據模型、物理數據模型。概念數據模型主要用來描述世界的概念化結構,它使資料庫的設計人員在設計的初始階段,擺脫計算機系統及DBMS的具體技術問題,集中精力分析數據以及數據之間的聯系等;邏輯數據模型這是用戶從資料庫所看到的模型,是具體的DBMS所支持的數據模型,如網狀數據模型、層次數據模型等;物理數據模型是面向計算機物理表示的模型,描述了數據在儲存介質上的組織結構,它不但與具體的DBMS有關,而且還與操作系統和硬體有關。

問題六:數據結構有哪些基本演算法 一、排序演算法1、有簡單排序(包括冒泡排序、插入排序、選擇排序)2、快速排序,很常見的3、堆排序,4、歸並排序,最穩定的,即沒有太差的情況二、搜索演算法最基礎的有二分搜索演算法,最常見的搜索演算法,前提是序列已經有序還有深度優先和廣度有限搜索;及使用剪枝,A*,hash表等方法對其進行優化。三、當然,對於基本數據結構,棧,隊列,樹。都有一些基本的操作例如,棧的pop,push,隊列的取隊頭,如隊;以及這些數據結構的具體實現,使用連續的存儲空間(數組),還是使用鏈表,兩種具體存儲方法下操作方式的具體實現也不一樣。還有樹的操作,如先序遍歷,中序遍歷,後續遍歷。當然,這些只是一些基本的針對數據結構的演算法。而基本演算法的思想應該有:1、回溯2、遞歸3、貪心4、動態規劃5、分治有些數據結構教材沒有涉及基礎演算法,lz可以另外找一些基礎演算法書看一下。有興趣的可以上oj做題,呵呵。演算法真的要學起來那是挺費勁。

問題七:數據結構哪些是四種常見的邏輯結構 ① *** *** 中任何兩個數據元素之間都沒有邏輯關系,組織形式鬆散.
② 線性結構 線性結構中的 結點按邏輯關系依次排列形成一個「鎖鏈」.
③ 樹形結構 樹形結構具有分支、層次特性,其形態有點象自然界中的樹.
④ 圖狀結構 圖狀結構中的結點按邏輯關系互相纏繞,任何兩個結點都可以鄰接

④ 圖計算框架有哪些

圖計算框架回顧 0 從數據並行到圖並行 自從04 年 Google 公開了它的 MapRece 之後,大家就像是發現了什麼新大陸一樣以極大的熱情投入到新型計算框

⑤ 數據結構——圖

轉自: http://www.cnblogs.com/mcgrady/archive/2013/09/23/3335847.html

閱讀目錄

一,圖的定義

二,圖相關的概念和術語

三,圖的創建和遍歷

四,最小生成樹和最短路徑

五,演算法實現

這一篇我們要總結的是圖(Graph),圖可能比我們之前學習的線性結構和樹形結構都要復雜,不過沒有關系,我們一點一點地來總結,那麼關於圖我想從以下幾點進行總結:

1,圖的定義?

2,圖相關的概念和術語?

3,圖的創建和遍歷?

4,最小生成樹和最短路徑?

5,演算法實現?

一,圖的定義

什麼是圖呢?

圖是一種復雜的非線性結構。

在線性結構中,數據元素之間滿足唯一的線性關系,每個數據元素(除第一個和最後一個外)只有一個直接前趨和一個直接後繼;

在樹形結構中,數據元素之間有著明顯的層次關系,並且每個數據元素只與上一層中的一個元素(雙親節點)及下一層的多個元素(孩子節點)相關;

而在圖形結構中,節點之間的關系是任意的,圖中任意兩個數據元素之間都有可能相關。

圖G由兩個集合V(頂點Vertex)和E(邊Edge)組成,定義為G=(V,E)

二,圖相關的概念和術語

1,無向圖和有向圖

對於一個圖,若每條邊都是沒有方向的,則稱該圖為無向圖。圖示如下:

因此,(Vi,Vj)和(Vj,Vi)表示的是同一條邊。注意,無向圖是用小括弧,而下面介紹的有向圖是用尖括弧。

無向圖的頂點集和邊集分別表示為:

V(G)={V1,V2,V3,V4,V5}

E(G)={(V1,V2),(V1,V4),(V2,V3),(V2,V5),(V3,V4),(V3,V5),(V4,V5)}

對於一個圖G,若每條邊都是有方向的,則稱該圖為有向圖。圖示如下。

因此,和是兩條不同的有向邊。注意,有向邊又稱為弧。

有向圖的頂點集和邊集分別表示為:

V(G)={V1,V2,V3}

E(G)={,,,}

2,無向完全圖和有向完全圖

我們將具有n(n-1)/2條邊的無向圖稱為無向完全圖。同理,將具有n(n-1)條邊的有向圖稱為有向完全圖。

3,頂點的度

對於無向圖,頂點的度表示以該頂點作為一個端點的邊的數目。比如,圖(a)無向圖中頂點V3的度D(V3)=3

對於有向圖,頂點的度分為入度和出度。入度表示以該頂點為終點的入邊數目,出度是以該頂點為起點的出邊數目,該頂點的度等於其入度和出度之和。比如,頂點V1的入度ID(V1)=1,出度OD(V1)=2,所以D(V1)=ID(V1)+OD(V1)=1+2=3

記住,不管是無向圖還是有向圖,頂點數n,邊數e和頂點的度數有如下關系:

因此,就拿有向圖(b)來舉例,由公式可以得到圖G的邊數e=(D(V1)+D(V2)+D(V3))/2=(3+2+3)/2=4

4,子圖

故名思義,這個就不解釋了。

5,路徑,路徑長度和迴路

路徑,比如在無向圖G中,存在一個頂點序列Vp,Vi1,Vi2,Vi3…,Vim,Vq,使得(Vp,Vi1),(Vi1,Vi2),…,(Vim,Vq)均屬於邊集E(G),則稱頂點Vp到Vq存在一條路徑。

路徑長度,是指一條路徑上經過的邊的數量。

迴路,指一條路徑的起點和終點為同一個頂點。

6,連通圖(無向圖)

連通圖是指圖G中任意兩個頂點Vi和Vj都連通,則稱為連通圖。比如圖(b)就是連通圖。下面是一個非連通圖的例子。

上圖中,因為V5和V6是單獨的,所以是非連通圖。

7,強連通圖(有向圖)

強連通圖是對於有向圖而言的,與無向圖的連通圖類似。

8,網

帶」權值」的連通圖稱為網。如圖所示。

三,圖的創建和遍歷

1,圖的兩種存儲結構

1) 鄰接矩陣,原理就是用兩個數組,一個數組保存頂點集,一個數組保存邊集。下面的演算法實現里邊我們也是採用這種存儲結構。如下圖所示:

2) 鄰接表,鄰接表是圖的一種鏈式存儲結構。這種存儲結構類似於樹的孩子鏈表。對於圖G中每個頂點Vi,把所有鄰接於Vi的頂點Vj鏈成一個單鏈表,這個單鏈表稱為頂點Vi的鄰接表。

2,圖的兩種遍歷方法

1) 深度優先搜索遍歷

深度優先搜索DFS遍歷類似於樹的前序遍歷。其基本思路是:

a) 假設初始狀態是圖中所有頂點都未曾訪問過,則可從圖G中任意一頂點v為初始出發點,首先訪問出發點v,並將其標記為已訪問過。

b) 然後依次從v出發搜索v的每個鄰接點w,若w未曾訪問過,則以w作為新的出發點出發,繼續進行深度優先遍歷,直到圖中所有和v有路徑相通的頂點都被訪問到。

c) 若此時圖中仍有頂點未被訪問,則另選一個未曾訪問的頂點作為起點,重復上述步驟,直到圖中所有頂點都被訪問到為止。

圖示如下:

註:紅色數字代表遍歷的先後順序,所以圖(e)無向圖的深度優先遍歷的頂點訪問序列為:V0,V1,V2,V5,V4,V6,V3,V7,V8

如果採用鄰接矩陣存儲,則時間復雜度為O(n2);當採用鄰接表時時間復雜度為O(n+e)。

2) 廣度優先搜索遍歷

廣度優先搜索遍歷BFS類似於樹的按層次遍歷。其基本思路是:

a) 首先訪問出發點Vi

b) 接著依次訪問Vi的所有未被訪問過的鄰接點Vi1,Vi2,Vi3,…,Vit並均標記為已訪問過。

c) 然後再按照Vi1,Vi2,… ,Vit的次序,訪問每一個頂點的所有未曾訪問過的頂點並均標記為已訪問過,依此類推,直到圖中所有和初始出發點Vi有路徑相通的頂點都被訪問過為止。

圖示如下:

因此,圖(f)採用廣義優先搜索遍歷以V0為出發點的頂點序列為:V0,V1,V3,V4,V2,V6,V8,V5,V7

如果採用鄰接矩陣存儲,則時間復雜度為O(n2),若採用鄰接表,則時間復雜度為O(n+e)。

四,最小生成樹和最短路徑

1,最小生成樹

什麼是最小生成樹呢?在弄清什麼是最小生成樹之前,我們需要弄清什麼是生成樹?

用一句語簡單概括生成樹就是:生成樹是將圖中所有頂點以最少的邊連通的子圖。

比如圖(g)可以同時得到兩個生成樹圖(h)和圖(i)

知道了什麼是生成樹之後,我們就很容易理解什麼是最小生成樹了。所謂最小生成樹,用一句話總結就是:權值和最小的生成樹就是最小生成樹。

比如上圖中的兩個生成樹,生成樹1和生成樹2,生成樹1的權值和為:12,生成樹2的權值為:14,我們可以證明圖(h)生成樹1就是圖(g)的最小生成樹。

那麼如何構造最小生成樹呢?可以使用普里姆演算法。

2,最短路徑

求最短路徑也就是求最短路徑長度。下面是一個帶權值的有向圖,表格中分別列出了頂點V1其它各頂點的最短路徑長度。

表:頂點V1到其它各頂點的最短路徑表

從圖中可以看出,頂點V1到V4的路徑有3條(V1,V2,V4),(V1,V4),(V1,V3,V2,V4),其路徑長度分別為15,20和10,因此,V1到V4的最短路徑為(V1,V3,V2,V4)。

那麼如何求帶權有向圖的最短路徑長度呢?可以使用迪傑斯特拉(Dijkstra)演算法。

⑥ 根據建築圖進行結構計算的步驟是什麼

一, 分析建築條件,准備初步工作:
1. 底框部分:
(1) 根據建築條件圖布置框架柱軸網,由抗震概念設計,盡量不要出現單根柱而不能形 成一榀框架的情況,柱距一般為 6 米;
(2) 柱截面初步設計;單層商鋪部分的框架柱截面設為 350X350,底框部分的框架柱設 為 400X400;
(3) 根據柱軸網確定剪力牆的分布(長度和距離) ;
(4) 剪力牆一般分布在樓梯間處,與電信專業協調,預留電表箱位置;
(5) 剪力牆往往矮而長,變形能力差,多為剪切破壞,宜開豎縫保證高寬比大於 1.5;
(6) 根據底層店面部分的牆厚確定框架梁,柱偏心;
(7) 根據框架柱的設置和柱距,確定框架梁的高度和寬度(一般上面有出承重牆的框架 梁寬度不小於 350,其它牆梁寬度不小於 300,高度不小於凈跨的 1/5)(框架結構梁截面 ; 尺寸控制辦法: 計算時用 TAT, 看計算結果配筋圖內的配筋率圖; 要求全截面配筋率 1.5-1.7 之間)
(8) 其框架和抗震牆的抗震等級,6,7 度可分別按三,二級採用;
2. 磚混部分:
(1) 根據縱橫牆的布置及可能會有的屋面構架,確定構造柱的位置和種類, (最外圍的構 造柱直接升到女兒牆,門窗洞口處的構造柱尺寸最好與門洞處的短牆吻合)
(2) 根據戶型布置設置梁,包括其寬度和高度(其位置應把樓板分成規則的矩形,在陽 台較大窗洞處或門窗連續設置處應設置過梁,且其高度加上門窗的高度應等於樓層高度) ;
(3) 根據戶型布置確定板厚,一般取短向跨度的 1/35,但是最好不要小於 100,客廳不 小於 120,否則影響使用;陽台,廚衛一般為 90,屋面板厚 120,樓梯梯板厚度為板跨的 1/28,且平台梁高度與其下的窗高之和要等於建築標高;
(4) 根據牆體外立面的腰線做法,確定外圍圈樑的高度和做法;
(5) 根據總體要求,設置不同的結構標准層與荷載標准層;
(6) 陽台處的挑梁高度為挑出長度的 1/3-1/6;
二, 輸入計算模型,進行程序計算:
1. 底框部分:
(1) SAT-8 計算底框時不能考慮風荷載.若在"底框結構空間分析方法"中選取"有限元整 體演算法"可計算風荷載,但結果偏小建議不使用;
(2) 上部承受牆荷載的牆梁寬度不於 300;
(3) 過渡層如果開洞大於 800,需要設邊梁;
(4) 抗震牆厚度不小於凈高的 1/20, 且宜開設洞口形成若干牆段, 其高寬比不宜小於 2;
(5) 注意:梁和柱的偏心,應根據建築要求與砌體外牆平齊,且上部的砌體抗震牆與底 部的框架梁或抗震牆應對齊或基本對齊;
(6) 注意:剪力牆材料為混凝土及其強度等級;
(7) 材料等級:整個工程鋼筋等級應統一為 II 級或 III 級,樓板,梁為 C30 混凝土,柱 為 C25 混凝土,剪力牆為 C30 混凝土;
(8) 在 SATWE 中進入底框模型後選取荷載時, 選取上部磚混荷載的標准組合來計算配筋, 這樣可以不用單獨建立磚混的計算模型
(9) 在模型中,應輸入底層的磚牆,並計算出二層磚混結構與底框結構的抗側剛度之比, 為保證房屋的整體抗震性能較好,最好在 1.3-1.8 之間(1.5 左右) ,以此確定剪力牆的是否 開洞和增減長度; (10) 通過 JCCAD 得出綜合模型中的柱底內力設計值簡圖,用柱底內力除以單樁豎向承 載力特徵值,確定框架柱下應該設置的樁數,並由此確定承台類型(單樁,兩樁等) ;
(11) 對於小牆垛的強度和梁端支承處砌體的局壓的計算應予以重視;
(12) 一般不考慮牆梁荷載折減,否則應在設計說明中提出對施工及使用的要求;
(13) SAT-8 計算底框時不能進行柱雙偏壓驗算.但是當縱橫向尺寸接近及角柱可根據經 驗調整柱配筋,或用高層版 TAT 進行雙偏壓驗算;
(14) 當平面布置較規則時(無柱列錯位情況)SAT-8 計算結果與採用 PK 計算無顯著差 別.
2. 磚混部分:
(1) 門窗洞口的輸入必須盡量准確,門上方設置過梁,上方有梁的門窗洞口,其牆可不 用輸入,牆上不應設轉角窗;
(2) 構造柱先不輸入,待進行初次計算後得出哪些地方需要加構造柱(打出計算書) ,再 加入所需構造柱,直到滿足抗震計算要求;
(3) 該部分的梁用 SATWE 中的"有限元整體演算法"計算;門洞過梁的配筋應以列表的形式 表示;
(4) 建築材料:一層為 MU10 燒結粘土磚,M7.5 混合砂漿(室外地坪以下為 M7.5 水泥 砂漿) ,二層以上為 MU10 燒結粘土磚,M5.0 混合砂漿(底框結構時,二層改為 M7.5 混合 砂漿) 一層以上板柱與梁, , 圈樑和屋頂構架可以用 C20 混凝土; 輕質隔牆一般採用 3KN/m2 的加氣混凝土砌塊;
(5) 修改部分樓板的板厚和部分構件的材料,以符合要求;
(6) 計算基礎時,板的活荷載可以折減,計算梁,板時,不折減;坡屋面的面荷載要用 水平投影的值; (7) 閣樓層的高度=起坡處的高度+成坡部分高度的一半;
(8) 准確把握總體信息,分清自然層與結構,荷載標准層的對應關系,進行總體裝配;
(9) 陽台如果有分戶隔牆,最好不要按照承重的磚混結構考慮,應考慮層層設置挑梁, 上面輸入牆荷載.
三, 根據電算結果,繪制施工圖:
1. 基礎部分: (如果純磚混建築採用樁基礎,那麼計算時仍應按照底框模型來計算,但程序 中的中梁剛度放大系數不應取 2,應該取 1,總體信息中的底框層數注意修改為2).
(一)承台:
(1) 根據柱底內力設計值簡圖確定柱與牆下所需樁數, 一般有單樁 (配筋按照構造要求) , 兩樁,三樁,四樁,五樁等,需要通過計算配筋;
(2) 柱下所需樁數及樁之間的間距(一般為 4d) ,確定承台尺寸: a.承台厚度不小於 300;且應比基礎梁高度大 200 為宜; b.承台寬度不應小於 500,邊樁中心至承台邊緣的距離不宜小於樁的直徑或邊長,且樁的外 邊緣至承台邊的距離不小於 150;
(3) 承台配筋,對於矩形承台應按雙向均勻通長配置,直徑不宜小於 Ф10,間距不宜大 於 200,三樁承台,鋼筋應按三向板帶均勻布置,且最裡面的三根鋼筋圍成的三角形應在柱 截面范圍內;單柱單樁的承台按構造配筋,根據重慶市規范,應設置 Ф12@100 的封閉箍;
(4) 承台主筋除滿足計算要求外,還應符合最小配筋率要求,主筋直徑不宜小於 Ф12, 箍筋不宜小於 Ф8;
(5) 承台受彎計算中, 在得出 X, 方向柱邊的彎矩後, Y 除以 0.9*fy*Ho,可得出配筋面積; (6) 當承台混凝土強度等級低於柱或樁的混凝土強度等級時,尚應驗算柱下或樁上承台 的局部受壓承載力;
(二)基礎梁:
(1) 由承台和剪力牆的分布情況布置基礎聯系梁,單樁承台宜在互相垂直的方向上設置, 兩樁承台宜在其短向設置;
(2) 寬度不應小於 250,且應根據上部的承重情況加寬(當承受剪力牆時,應每邊多出 剪力牆 50,當承受設縫時,寬度應寬出每片牆外邊各 50) ,高度可取承台中心距的 1/10~1/15;
(3) 基礎梁設計,荷載取基礎基本組合,配筋計算可以用 JCCAD 中的計算結果,也可以 以樁為支點按照連續梁模型用設計值進行計算 (可簡化為簡支)上下縱筋直徑不小於 2Ф12, , 並應按受拉要求錨入梁內;
(4) 樁頂進入基礎梁內長度為 50,樁的主筋錨入到基礎梁長度不小於 30d;
(5) 梁頂面宜與承台位於同一標高;梁頂面一般比一層室內地面低 50cm;
(6) 要注意突出部分(如樓梯入口處的門樓,立面上的構架等)下面也要設置基礎梁, 有的需要打樁;
(7) 基礎拉梁高度取跨長的 1/20,然後取柱子豎向力的 1/10 作為地梁的軸力,以計算地 梁的縱筋; 2. 底框部分:
(一) 梁:
(1) 對生成的框架梁(牆托梁)配筋結果,需要根據這部分內容在規范中的要求進行調 整; (需對照規范逐條校對) ;
(2) 依據配筋驗算圖自行配筋.不管是否按牆梁計算,必須滿足托牆梁的構造要求.對 非托牆梁可放鬆腰筋配置.因牆梁為拉桿受力,麵筋拉通不宜小於 2Ф18;樑上,下筋放大 系數 1.05
(3) 住宅部分的框架梁按照牆梁處理,編號均為 KZL-X,箍筋間距均為 100;
(4)寬度大於 350 的梁,均採用 4 肢箍,且上下縱筋至少 4 根貫通;
(5)由於衛生間降板 400,且板厚 120,故其周圍的梁截面應取到 550; (6)對於高度 h 大於 500 的框架梁,應設置不少於 2Ф14 的腰筋,間距不應大於 200,且 根據框架梁計算結果確定並標出是構造需要(G) (構造要求腰筋總面積不應小於腹板截面 面積 bhw 的 0.2%)還是抗扭計算需要(N) ;如計算需配受扭筋則扭筋間距≤200:梁高 400-450 不少於 2 根(雙邊) 梁高 500-650 不少於 4 根(雙邊) 梁高 700-850 不少於 6 ; ; 根(雙邊) 梁高 900-1050 不少於 8 根(雙邊) ;
(6) 框架梁跨中截面縱向受力鋼筋總配筋率不應小於 0.6%;
(7) 框架梁每跨底部的縱向受力鋼筋應通長配置;
(8) 單獨表示的梁要有標高,一般是建築標高-0.030=結構標高;
(9) 主次梁交接處,梁有集中力處應附加箍筋和吊筋,優先採用附加箍筋;
(10)加大過渡層及屋面圈樑配筋;
(11)截面往往由箍筋配置情況控制.查看配筋驗算簡圖時,注意箍筋面積不超過 2.2 (D12@100) ;若縱筋面積較大,實際配筋率可能超過 2%時,宜增大梁截面重新計算,將 箍筋直徑控制在 12 以內; (12)應加強支座處的配筋,特別是框架梁為牆梁支座時; (13)如梁太密集,可以分畫為橫向梁和縱向梁兩張圖,
(二) 柱:
(1) 最好按照計算書中的數值自行配筋,以免自動生成時出現一些錯誤;
(2) 框架柱和剪力牆要根據軸壓比的大小進行多次調試,如果軸壓比小於 0.5,就應減小 截面,或者沿縱橫兩個方向截面高度不同,以求使截面優化,應盡量接近規范要求的 0.9, 且截面尺寸盡量接近;
(3) 框架柱箍筋不小於 Ф8,且應在支座處加密;
(4) 框架柱受力鋼筋不小於 3 根 HRB400 的 18;
(5) 樓梯間處的柱子要注意偏位,以滿足凈空要求;
(三)牆:
(1) 對於剪力牆,要求其抗側向剛度與上部二層的抗側向剛度之比符合規范要求;
(2) 抗震牆周邊設置梁(暗梁)和邊框柱(暗柱) ,梁寬度不宜小於牆厚的 1.5 倍,截面 高度不小於牆厚的 2.5 倍,邊框柱的截面高度不宜小於牆厚的 2 倍;
(3) 抗震牆的豎向和橫向分布鋼筋配筋率不應小於 0.25%,並採用雙排布置,拉筋間距 不應大於 600,直徑不小於 Ф8;
(4) 抗震牆的邊緣構件包括暗柱(沿全高加密箍筋) ,暗梁,設置在牆的邊框位置和開洞 周圍,具體配筋見規范;
(5) 盡量加強過渡層的構造措施,如能接受,可採取措施加大過渡層縱牆來抵抗平面外 彎矩的能力; (四)板: (1) 應採用雙層雙向通長配筋,且每方向配筋率不應低於 0.25%; (2) 長寬比滿足:6,7 度時不宜超過 4,8 度時不宜超過 3,9 度時不宜超過 2.5,否則 須驗算樓板平面內的抗彎承載力及其變形對整個結構的影響; (3) 不宜開設大洞口,樓梯,電梯間的周圍應設置抗震牆圍成的筒體,且必須嚴格按照 抗震牆的設計及施工要求進行設計及施工;
(4) 其外側邊緣應設置邊緣拉梁予以加強,拉梁可利用縱向框架梁或底部外縱牆,拉梁 負筋至少應有 50%且不低於 0.25%配筋率的鋼筋貫通梁全長.
3. 磚混部分:
(1) 關於構造柱:
1) 編號要清楚,凡有涉及該編號構造柱的圖紙中必須要畫其配筋大樣,且標明起始標高;
2) 構造柱縱筋不小於 4Ф14,箍筋間距不大於 200;八度超過五層採用 4Ф14, 即縱筋加 大一級;還應根據《建築抗震設計規范》P76 的要求,對角柱,邊柱從嚴要求;
3) 應符合《建築抗震設計規范》的要求,較大洞口(內縱牆,橫牆>=2m,外縱牆 >=2.4m)兩側應設構造柱;特別要注意:《建築抗震設計規范》第 7.3.2.5 條)房屋高 ( 度和層數接近限值時,縱,橫牆內構造柱尚應符合下列要求: a.橫牆內的構造柱間距不宜大於層高的二倍;下部 1/3 樓層的構造柱間距適當減小; b.當外縱牆開間大於 3.9m 時,應另設加強措施.內縱牆的構造柱間距不宜大於 4.2m. (規 范的 7.3.2.5 的"接近"是指達到《抗規》第 7.1.2 條表中限制的層數或差一層. )
(2) 根據各層板配筋簡圖人工配筋或調整自動生成的鋼筋(面積,規格,間距等) ,板厚 與標高不同的板,板底鋼筋和上部負筋必須斷開;
(3) 當有 I,II 級鋼筋混用時,應注意:板的鋼筋面積按照 I 級鋼筋計算;
(4) 板上下的鋼筋間距宜相等,或互為倍數,直徑級差均取一級,樓板的最小配筋率 (ρmin=As/h)應按照規范取用;
(5) 負筋不宜過細,一面被踩塌,較大直徑的鋼筋不宜過疏,否則易開裂;
(6) 陽台部分需要清楚表示截面大樣,其下面的拖梁和邊梁需要根據計算結果配筋,其 大樣要注意與總體圖協調(如牆體和構造柱的有無等) ; (7) 屋頂構架的梁,板配筋均可按構造配置,支撐構架的柱子從屋頂起,注意其與下部 構造柱的銜接問題; (8) 屋面屬於溫度,收縮應力較大的區域,配筋間距宜取 150~200,在板的未配筋表面 布置溫度鋼筋,其上,下表面沿縱,橫兩個方向的配筋率均不宜小於 0.1%,常採用拉通一 半配筋面積,不足另加的配筋方法; (9) 跨度小於 2 米的板鋼筋只需說明雙層雙向可用雙層雙向 Ф8@200,坡屋頂由於梁數 量較多,故均為小面積板,可用雙層雙向 Ф8@150; (10) 一些細部尺寸在"樓板模板配筋圖"中已經表示的,在"梁平面整體配筋圖"中可不再 表示; (11) 板中的各種負筋,由於板的計算跨度唯一,故負筋伸入板內的長度應相等,且應准 確標出負筋端部到牆邊或梁邊的距離; (12) 現澆挑板陽角加輻射狀附加筋; (13) 配筋計算時,可考慮塑性內力重分布,將板上筋乘以 0.8~0.9 的系數,板下筋乘以 1.1~1.2 的系數.但是,按彈性計算的雙向板鋼筋是板某幾處的最大值,不必再人為放大, 支承在外牆上的負筋不宜過大(一般板厚≥150 時,採用 10@200,否則用 8@200;非矩形 板宜減少支座配筋, 增大跨中配筋; 輕質隔牆下只有在垂直單向板長邊且不可能移位的位置, 下面才加粗鋼筋以形成暗梁; (14) 樓板計算時,磚混結構房間外牆(包括樓梯間牆)不應按固接計算,樓板邊支座應 按鉸接計算; (15) 雨蓬和陽台的豎板現澆時,最小厚度應為 80,否則難以施工;豎筋應放在板中部, 當做雙排筋時,高度若小於 900,則最小板厚為 100,否則為 120; (16) 挑板鋼筋應留有餘地,並應採用大直徑鋼筋,防止踩彎,應將挑板支座的負筋伸過 全跨; (17) 應註明施工質量控制等級; (18) 多層砌體結構在抗震設防地區,樓板面有高差時,其高差不應超過一個梁高(當錯 層樓蓋高差不大於 1/4 層高且不大於 700mm) 超過時, ; 應將錯層當兩個樓層計入房屋的總 層數中. 當錯層樓蓋高差不大於 1/4 層高且不大於 700mm,錯層交界的牆體,除兩側樓蓋 處圈樑照常設置外,還應沿牆長每隔不大於 2m 增設一根牆中構造柱; (19) 關於挑梁:
1) 陽台挑梁有時與牆中的煙道矛盾;
2) 頂層挑梁有時為兩層板荷載,不能選用標准層的挑梁;
3) 挑梁外露與牆內部分標高不同時應注意梁在折角處的寬度及鋼筋錨固;
4) 嚴格控制挑梁埋入砌體的長度:即挑梁埋入砌體長度 l1 與挑出長度 l 之比宜大於 1.2, 當挑樑上無砌體時,l1/l 之比宜大於 2; (20)圈樑兼過梁時,過梁部分的鋼筋應按計算另行增配;(第 7.1.5.4 條) (21) 砌體結構的大梁,應根據《砌體結構設計規范》第 6.2.5 條設計.即:當梁跨度大 於或等於下列數值時,其支承處宜加設壁柱,或採用其他加強措施: a.對 240mm 厚的磚牆為 6m,對 180mm 厚的磚牆為 4.8m; b.對砌塊,料石牆為 4.8m; (22) 凸窗檯板抗傾覆要計算足夠; (23) 坡地上多層砌體房屋的層數和總高度計算的要求:高度,層數應從低處算起; (24) 躍層住宅六層上躍層的樓梯,一般放在客廳的樓板上,而一般情況下其下又不允許 加梁,可以在樓梯下加暗梁(板)的方法解決.即: a.如果樓梯與廳的現澆板短向平行, 可以認為現澆板的一部分也是樓梯的一部分, 鋼筋疊加. 但要注意疊加後的鋼筋間距不要過小. b.如果樓梯與廳現澆板長向平行,則於板短向在樓梯下加暗梁或板下附加筋.暗梁寬度或板 下附加筋放置寬度為局部荷載下的有效分布寬度(荷載規范附錄二). (25) 縱牆抗震驗算不過時,可將內縱牆改為 140 厚的鋼筋混凝土牆,造價雖略增高,但 可在建築面積不變的情況下增加使用面積; (26) 樓梯間牆體水平支撐較弱,頂層牆體較高,在 8,9 度時,頂層樓梯間橫牆和外牆 宜沿牆高設 2φ8@500 的通長筋,9 度時,休息平台處宜增設一鋼筋帶; (27) 獨立梁的受力鋼筋均不得小於 Ф14,Ф12 一般用於構造筋及架立

⑦ 常用數據結構有哪些

數據結構分為8類有:數組、棧、隊列、鏈表、樹、散列表、堆、圖。數據結構是指相互之間存在著一種或多種關系的數據元素的集合和該集合中數據元素之間的關系組成 。

1、數組

數組是可以再內存中連續存儲多個元素的結構,在內存中的分配也是連續的,數組中的元素通過數組下標進行訪問,數組下標從0開始。例如下面這段代碼就是將數組的第一個元素賦值為 1。

2、棧

棧是一種特殊的線性表,僅能在線性表的一端操作,棧頂允許操作,棧底不允許操作。 棧的特點是:先進後出,或者說是後進先出,從棧頂放入元素的操作叫入棧,取出元素叫出棧。

3、隊列

隊列與棧一樣,也是一種線性表,不同的是,隊列可以在一端添加元素,在另一端取出元素,也就是:先進先出。從一端放入元素的操作稱為入隊,取出元素為出隊。

4、鏈表

鏈表是物理存儲單元上非連續的、非順序的存儲結構,數據元素的邏輯順序是通過鏈表的指針地址實現,每個元素包含兩個結點,一個是存儲元素的數據域 (內存空間),另一個是指向下一個結點地址的指針域。根據指針的指向,鏈表能形成不同的結構,例如單鏈表,雙向鏈表,循環鏈表等。

5、樹

樹是一種數據結構,它是由n(n>=1)個有限節點組成一個具有層次關系的集合。把它叫做 「樹」 是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。

6、散列表

散列表,也叫哈希表,是根據關鍵碼和值 (key和value) 直接進行訪問的數據結構,通過key和value來映射到集合中的一個位置,這樣就可以很快找到集合中的對應元素。

7、堆

堆是一種比較特殊的數據結構,可以被看做一棵樹的數組對象,具有以下的性質:堆中某個節點的值總是不大於或不小於其父節點的值;堆總是一棵完全二叉樹。將根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。常見的堆有二叉堆、斐波那契堆等。

8、圖

圖是由結點的有窮集合V和邊的集合E組成。其中,為了與樹形結構加以區別,在圖結構中常常將結點稱為頂點,邊是頂點的有序偶對,若兩個頂點之間存在一條邊,就表示這兩個頂點具有相鄰關系。

⑧ 數據結構中評價一個好的演算法,應該從哪幾個方面來考慮

數據結構中評價一個好的演算法,應該從四個個方面來考慮,分別是:

一、演算法的正確性。

二、演算法的易讀性。

三、是演算法的健壯性。

四、是演算法的時空效率(運行)。

演算法的設計取決於數據(邏輯)結構,而演算法的實現依賴於採用的存儲結構。數據的存儲結構實質上是它的邏輯結構在計算機存儲器中的實現,為了全面的反映一個數據的邏輯結構,它在存儲器中的映象包括兩方面內容,即數據元素之間的信息和數據元素之間的關系。

不同數據結構有其相應的若干運算。數據的運算是在數據的邏輯結構上定義的操作演算法,如檢索、插入、刪除、更新和排序等。

(8)圖形結構演算法擴展閱讀:

分類

1、集合結構。該結構的數據元素間的關系是「屬於同一個集合」。

2、線性結構。該結構的數據元素之間存在著一對一的關系。

3、樹型結構。該結構的數據元素之間存在著一對多的關系。

4、圖形結構。該結構的數據元素之間存在著多對多的關系,也稱網狀結構。

⑨ 數據結構有什麼

常用數據結構有哪些
數據元素相互之間的關系稱為結構。有四類基本結構: *** 、線性結構、樹形結構、圖狀結構;

*** 結構:除了同屬於一種類型外,別無其它關系

線性結構:元素之間存在一對一關系常見類型有: 數組,鏈表,隊列,棧,它們之間在操作上有所區別.例如:鏈表可在任意位置插入或刪除元素,而隊列在隊尾插入元素,隊頭刪除元素,棧只能在棧頂進行插

入,刪除操作.

樹形結構:元素之間存在一對多關系,常見類型有:樹(有許多特例:二叉樹、平衡二叉樹、查找樹等)

圖形結構:元素之間存在多對多關系,圖形結構中每個結點的前驅結點數和後續結點多個數可以任意
演算法和數據結構有什麼區別??
數據結構是演算法實現的基礎,演算法總是要依賴於某種數據結構來實現的。往往是在發展一種演算法的時候,構建了適合鼎這種演算法的數據結構。一種數據結構如果脫離了演算法,那還有什麼用呢?實際上也不存在一本書單純的講數據結構,或者單純的講演算法。當然兩者也是有一定區別的,演算法更加的抽象一些,側重於對問題的建模,而數據結構則是具體實現方面的問題了,兩者是相輔相成的。
什麼是數據結構,數據之間的關系有幾種
數據結構是一門研究非數值計算的程序設計問題中計算機的操作對象以及它們之間的關系和操作等等的學科。

——《數據結構》(C語言版),嚴蔚敏,清華大學出版社。

數據之間的結構有線性的數據結構(計算機處理的對象之間如果存在著一種最簡單的線性關系,則這類數學模型可稱為線性的數據結構)和表、樹和圖之類的數據結構(描述非數值問題的數學模型時不能用數學方程)。
數據結構中*和&的區別是什麼
應該是C++里的吧?沒有在C語言版的數據結構中看見&吧?

在定義時,* 是一個標識符,聲明該變數是一個指針,比如說int *p; 那p就是一個指向int型的指針;

在調用時,*p是指指針p指向的那個變數,比如說之前有int a=5;int *p=a;那麼p的值是a的地址,也就是指針p指向a,*p則等於a的值,即*p=5。

而&,則是引用,比如說有定義int a=5;再定義int b=&a;那麼這里的b則引用a的值,即b=5

,而再給b賦值:b=10,a的值也會變為10。

我想樓主會問*和&的區別,應該是針對函數定義里的參數而言吧,因為這里的這兩者比較相似:

舉幾個簡單例子:

先定義有int x=0;和int *p=x;

1、若定義函數: void fun_1(int a){ a=5;} , 則調用:fun_1(x); 之後,x還等於0;因為fun_1函數只改變了形參a的值,a只是fun_1函數里的局部變數,調用fun_1(x)相當於是「a=x;a=5;」,x沒變;

2、若定義函數:void fun_2(int &a){ a=5;} , 則調用:fun_2(x); 之後,x等於5;因為這里的a引用了x的值;

3、若定義函數:void fun_3(int *a){ *a=5;} , 則調用:fun_3(p); 之後,x也等於5;因為fun_3函數的參數a是一個指針,相當於a=p;*a則與*p指向同一地址,改變*a即改變*p即x
數據結構都有哪些分類呢?
根據數據元素間關系的不同特性,將數據結構常分為下列四類基本的結構:

⑴ *** 結構。該結構的數據元素間的關系是「屬於同一個 *** 」。

⑵線性結構。該結構的數據元素之間存在著一對一的關系。

⑶樹型結構。該結構的數據元素之間存在著一對多的關系。

⑷圖形結構。該結構的數據元素之間存在著多對多的關系,也稱網狀結構。

數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關系的數據元素的 *** 。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。
數據結構是什麼?
呵呵,看你這樣喜歡去想是什麼的,將來肯定會知道的!但是既然問了,我就說一下我自己的見解!

其實,大家都說,數據結構+演算法=程序!數據結構就是提供一個程序中數據的邏輯視圖!什麼邏輯視圖呢?就是在你看起來你這樣來組織你的數據!比如說一張地圖!有很多城市,每個城市之間有很多路,每條路有距離!讓你來求一下給定的兩個城市的最短路!然後你就可用「無向圖」來組織這張地圖!就是用節點表示城市,邊表示路,邊的權表示路長度!接下來你的程序就可以用演算法在這張圖上(無向圖)上來操作!可能用dijkstra演算法來求兩點之間的最短路!

數組是一種數據結構!雖然簡單,但是她也是一種數據的存儲方式,就是這樣一個挨一個的存儲!數組也有很多很好的性質!

說這么多呢!其實數據結構是數據的組織方式,為你的程序提供更高的效率,不管用

數組,鏈表(單向,雙向,循環等等),堆棧(最大堆,最小堆),隊列(優先順序隊列)樹(二叉樹,紅黑樹,AVL樹,B+樹等等)區間樹,並查集,圖等等都是對於特定的問題,來說你這樣組織數據是你的程序更加高效而已!數據結構和演算法,一個用來存儲數據,一個用來操作數據!
什麼是數據結構
數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關系的數據元素的 *** 。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索演算法和索引技術有關。

名詞定義

數據結構是指相互之間存在著一種或多種關系的數據元素的 *** 和該 *** 中數據元素之間的關系組成。記為:

Data_Structure=(D,R)

其中D是數據元素的 *** ,R是該 *** 中所有元素之間的關系的有限 *** 。

其它定義

Sartaj Sahni在他的《數據結構、演算法與應用》一書中稱:「數據結構是數據對象,以及存在於該對象的實例和組成實 例的數據元素之間的各種聯系。這些聯系可以通過定義相關的函數來給出。」他將數據對象(data object)定義為「一個數據對象是實例或值的 *** 」。

Clifford A.Shaffer在《數據結構與演算法分析》一書中的定義是:「數據結構是ADT(抽象數據類型Abstract Data Type) 的物理實現。」

Robert L.Kruse在《數據結構與程序設計》一書中,將一個數據結構的設計過程分成抽象層、數據結構層和實現層。其中,抽象層是指抽象數據類型層,它討論數據的邏輯結構及其運算,數據結構層和實現層討論一個數據結構的表示和在計算機內的存儲細節以及運算的實現。

數據結構具體指同一類數據元素中,各元素之間的相互關系,包括三個組成成分,數據的邏輯結構,數據的存儲結構和數據運算結構。

研究對象

一、數據的邏輯結構:指反映數據元素之間的邏輯關系的數據結構,其中的邏輯關系是指數據元素之間的前後件關系,而與他們在計算機中的存儲位置無關。邏輯結構包括:

1. ***

2.線性結構

3.樹形結構

4.圖形結構

二、數據的物理結構:指數據的邏輯結構在計算機存儲空間的存放形式。

三、數據結構的運算
數據結構有幾種結構類型,分別是什麼
如果指的是邏輯結構,分為4種: *** 、線性、樹形、圖形

如果指的是物理結構(也叫做存儲結構),主要也是4種:順序、鏈式、索引、散列

⑩ 數據結構與演算法基礎知識

1.數據結構的邏輯結構

(1)集合結構

(2)線性結構(存在唯一的第一個元素與唯一的最後一個元素)(eg: 線性表、隊列、棧、字元串、數組、鏈表)

(3)樹形結構(一對多)

(4)圖形結構(多對多)

2.數據結構的物理(存儲)結構

(1).順序存儲結構(插入與刪除低效因為要挪動其他元素的位置。但是遍歷簡單)

(2).鏈式存儲結構(插入與刪除高效,但是遍歷低效)

3.大O表示法(注意大O表示法表達的是最壞的情況)

規則:

(1)用常數1取代其他所有的常數(注意常數0也當1算)(3 -> 1, O(1))

(2) 只保留最高階項(n^3+2n^2+5 ->n^3, O(n^3))

(3) 若存在最高階,省略與其想成的常數(2n^3 -> n^3, O(n^3))

4. 時間復雜度類型

(1)常數階

(2)線性階

(3)平方階

(4)對數階

(5)立方階

(6)nlog階

(7)指數階(O(2^n)或O(n!), 往往會造成噩夢般的時間消耗)

5. 空間復雜度(用大O表示法求解改演算法的輔助空間即可,例如用於交換變數用的臨時變數的數量)

六. 順序存儲的線性表

線性表結構特點:

(1) 存在唯一一個的被稱作」第一個」的數據元素;

(2) 存在唯一一個的被稱作」第二個」的數據元素;

(3) 除了第一個元素以外,結構中的每個數據元素均有一個前驅;

(4) 除了最後一個元素以外,結構中的每個數據元素均有一個後繼。

七. 鏈式存儲的線性表(單鏈表)

首元結點是鏈表中第一個值域不為空的結點。

頭結點是一個值域為空且處於首位的結點。

首指針可指向首元結點也可指向頭結點,但是如果指向頭結點可以更加方便的處理單鏈表的插入和刪除問題,不用再對首位做額外判斷,並且指向頭節點的指針永遠不用變化。

*注意一下單鏈表的前插法和尾插法。尾插法更符合邏輯

閱讀全文

與圖形結構演算法相關的資料

熱點內容
農業app怎麼開通快捷支付 瀏覽:908
pythonredisdict 瀏覽:382
如何攻擊別人網賭伺服器 瀏覽:878
隱私與應用加密的圖案密碼 瀏覽:34
陳情令王一博解壓 瀏覽:35
c編譯器使用說明 瀏覽:703
鄭州前端程序員私活有風險嗎 瀏覽:10
小型螺桿機壓縮機 瀏覽:516
成人解壓最好的方法 瀏覽:48
最小製冷壓縮機 瀏覽:488
xampp支持python 瀏覽:367
深圳周立功單片機 瀏覽:61
圓上點與點之間角度演算法 瀏覽:869
怎麼知道微信關聯了哪些app 瀏覽:702
android事件驅動 瀏覽:888
簽約大屏系統源碼 瀏覽:808
安卓系統怎麼轉入平板 瀏覽:429
安卓手機相機怎麼提取文字 瀏覽:219
如何查看伺服器映射的外網地址 瀏覽:985
圖片刺綉演算法 瀏覽:675