定義
在計算機科學中,在任何問題中,數據元素都不是孤立存在的,而是在它們之間存在著某種關係,這種數據元素相互之間的關係稱為結構(structure)。根據數據元素之間關係的不同特性,通常分為4類基本結構:線性結構、樹形結構、集合、圖狀結構或網狀結構。
基本結構
在計算機科學中,根據數據元素之間關係的不同特性,通常分為4類基本結構。
集合
集合是指結構中的數據元素之間除了“同屬一個集合”的關係外,別無其他關係。例如這些數據項的類型是相同的。
線性結構
線性結構是指結構中的數據元素之間存在一個對一個的關係。常用的線性結構有:線性表,棧,佇列,雙佇列,數組,串。
樹形結構
樹形結構是指結構中的數據元素之間存在一個對多個的關係。在樹形結構中,樹根結點沒有前驅結點,其餘每個結點有且只有一個前驅結點。葉子結點沒有後續結點,其餘每個結點的後續節點數可以是一個也可以是多個。經典數據結構中的各種樹狀圖是一種典型的樹形結構:一顆樹可以簡單的表示為根, 左子樹, 右子樹。 左子樹和右子樹又有自己的子樹。
圖狀結構或網狀結構
圖狀結構或網狀結構是指結構中的數據元素之間存在多個對多個關係。網狀結構(reticular formation)分為全連線網狀和不完全連線網狀兩種形式。全連線網狀中,每一個節點和網中其它節點均有鏈路連線。不完全連線網中,兩節點之間不一定有直接鏈路連線,它們之間的通信,依靠其它節點轉接。這種網路的優點是節點間路徑多,碰撞和阻塞可大大減少,局部的故障不會影響整個網路的正常工作,可靠性高;網路擴充和主機入網比較靈活、簡單。但這種網路關係複雜,建網不易,網路控制機制複雜。廣域網中一般用不完全連線網狀結構。
實現
在面向對象的程式語言和面向過程的程式語言中,我們實現結構選擇有所不同,一種是根據我們選擇自定義,一種是調用系統包。
C
在C語言中,為了實現我想要的結構,可以自定義定義結構體類型,將多個相關的變數包裝成為一個整體使用。在結構體中的成員,可以是相同、部分相同,或完全不同的數據類型。在C語言中,結構體不能包含函式。在面向對象的程式設計中,對象具有狀態(屬性)和行為,狀態保存在成員變數中,行為通過成員方法(函式)來實現。C語言中的結構體只能描述一個對象的狀態,不能描述一個對象的行為。在C++中,對結構體進行了擴展,C++的結構體可以包含函式。
C++
在表達式中,可以通過下列形式引用某個特定結構的成員:
結構名.成員
其中的機構成員運算符“.”將結構名和成員名連線起來。
結構還可以嵌套。我們可以用對角線上的兩點來定義矩形,相應的結構定義如下:
struct rect{
struct point pt1;
struct point pt2;
};
結構rect包含兩個point 類型的成員。如果按照下列方式聲明screen變數:
struct rect screen ;
則可以用語句:
引用screen 的成員pt1的x坐標。
C#
聲明結構的語法和聲明類的語法相似
結構是值的類型 所有的值類型都一樣 結構類型的變數含有自己的數據 因此
結構類型的變數不能為null
兩個結構變數不能引用同一對象
1.結構類型的變數不能為null
2.兩個結構變數不能引用同一對象
struct StructName
{
Memberdeclarations
}
例如 下面的代碼生命了一個名稱為Point的結構 他有兩個共有欄位 名稱為X和Y 在Main中 聲明了3個Point類型的變數 並對他們賦值 列印。
struct Point
{
public int X;
public int Y;
}
class Program
{
static void Main()
{
Point first,second,third;
first.X=10;first.Y=10;
second.X=20;second.Y=20;
third.X = first.X + second.X;
third.Y = first.Y+ second,Y;
Console.WriteLine("first: {0},{1}",first.X,first.Y);
Console.WriteLine("second: {0},{1}",second.X,second.Y);
Console.WriteLine("third: {0},{1}",third.X,third,Y);
}
}
在C++和C#中也有已經封裝好的ji基本結構包可以直接調用,如Set。