線性表是最簡單和最經常使用的一種數據結構,由n(n>=0)個相同類型的數據元素(結點)組成的一個有序數列。bash
線性表中所含元素的個數個數n定義爲線性表的長度數據結構
當n>0時,稱爲空表,用一對空括號標示。記爲()性能
當n>0時,可表示爲(a1,a2...,an),a1稱爲表頭元素,an稱爲表尾元素,a(i-1)稱爲ai的直接前驅,a(i+1)稱爲ai的直接後繼(2<= i <= n-1)ui
用一組地址連續的存儲空間一次存儲線性表中的數據元素。即邏輯上相鄰的元素存儲在的存儲單元物理位置也是相鄰的。spa
通常用這種方法存儲的線性表簡稱順序表,順序表在內存的起始地址稱做順序表的基地址。指針
線性表的順序存儲結構中的特色:code
實現線性表的逆置:將(a1,a2,a3...an)轉換爲(an,....a2,a1)內存
SeqList Conveerts (SeqList L)
{
DataType x;
int i,k=L.length/2;
for(i = 0; i<k; i++)
{
x = L.data[i];
L.data[i] = L.data[L.length-i-1];
L.data[L.length-i-1] = x;
}
return L;
}
複製代碼
能夠用內存空間一組任意的存儲單元(能夠是地址連續的,也能夠是不連續的)來存儲線性表中的數據元素(data)。it
在存儲數據元素時,除了存儲數據元素自己外,還有存儲與它相鄰的數據元素在內存中的存儲地址信息。這兩部分信息組成該數據元素的存儲映像(Image),稱爲結點(Node)io
把存儲數據元素自己信息的域叫結點的數據域(Data Domain)
把存儲與它相鄰的數據元素的存儲地址信息的域叫結點的指針域(Reference Domain)
線性表經過每一個結點的指針域(引用域)造成了一個‘鏈條’,因此也叫作鏈表,單鏈表的頭用 head 聲明,尾部用 rear聲明。head-》 |data|next| 。。。 |data|next| 《-rear
若是結點的指針域只存儲該結點直接後繼(next)結點的存儲地址,則該鏈表叫「單鏈表」,單鏈表由:數據域(存儲元素自己信息)和指針域(存儲表中下一個結點的存儲地址)兩部分組成
若是單鏈表中的最後結點的指針域不爲空,而是指向單鏈表的頭結點,這樣就造成了一個「單循環鏈表」,優勢:從表的任一結點均可以訪問表中其餘結點
若是單鏈表的結點中增長一個指向其直接前趨的指針域(prior),這樣就造成了雙向鏈表。--》|prior|data|next|
有時候爲了操做運算方便,將雙向鏈表的尾結點和頭結點連接起來,就構成了雙向循環列表。