順序表,全名順序儲存結構,是線性表
的一種。通過《線性表》一節的學習我們知道,線性表用於儲存邏輯關係為「一對一」的資料,順序表自然也不例外。
不僅如此,順序表對資料的物理儲存結構也有要求。順序表儲存資料時,會提前申請一整塊足夠大小的物理空間,然後將資料依次儲存起來,儲存時做到資料元素之間不留一絲縫隙。
例如,使用順序表儲存集合,資料最終的儲存狀態如圖 1 所示:
圖 1 順序儲存結構示意圖
由此我們可以得出,將「具有 '一對一' 邏輯關係的資料按照次序連續儲存到一整塊物理空間上」的儲存結構就是順序儲存結構。
通過觀察圖 1 中資料的儲存狀態,我們可以發現,順序表儲存資料同陣列
非常接近。其實,順序表儲存資料使用的就是陣列。
使用順序表儲存資料之前,除了要申請足夠大小的物理空間之外,為了方便後期使用表中的資料,順序表還需要實時記錄以下 2 項資料:
順序表申請的儲存容量;
順序表的長度,也就是表中儲存資料元素的個數;
因此,我們需要自定義順序表,c 語言實現**如下:
typedef struct tabletable;注意,head 是我們宣告的乙個未初始化的動態陣列,不要只把它看做是普通的指標。
接下來開始學習順序表的初始化,也就是初步建立乙個順序表。建立順序表需要做如下工作:
因此,c 語言實現**如下:
#define size 5 //對size進行巨集定義,表示順序表申請空間的大小table inittable()
t.length=0;//空表的長度初始化為0
t.size=size;//空表的初始儲存空間為size
return t;
}我們看到,整個順序表初始化的過程被封裝到了乙個函式中,此函式返回值是乙個已經初始化完成的順序表。這樣做的好處是增加了**的可用性,也更加美觀。與此同時,順序表初始化過程中,要注意對物理空間的申請進行判斷,對申請失敗的情況進行處理,這裡只進行了「輸出提示資訊和強制退出」的操作,可以根據你自己的需要對**中的 if 語句進行改進。
通過在主函式中呼叫 inittable 語句,就可以成功建立乙個空的順序表,與此同時我們還可以試著向順序表中新增一些元素,c 語言實現**如下:
#include#include
#define size 5
typedef struct tabletable;
table inittable()
t.length=0;
t.size=size;
return t;
}//輸出順序表中元素的函式
void displaytable(table t)
printf("\n");
}int main()
printf("順序表中儲存的元素分別是:\n");
displaytable(t);
return 0;
}程式執行結果如下:
順序表中儲存的元素分別是:
1 2 3 4 5
可以看到,順序表初始化成功。
關於初始化及初始化順序
首先,類的成員變數會被自動初始化,並且會在構造器被呼叫前發生,如下 public class testinitialization public static void main string args 如下 主類 public class staticinitialization 呼叫main之前...
初始化順序
上次面試碰到一面試題,雖然知道但是感覺還是有必要記錄下來,利己利民,題目是關於初始化順序的,也許對很多初學者還是有點用處的。閒話不多說,先上 package initialseq public class parent public parent public int method package ...
初始化順序
在類的內部,變數定義的順序決定了初始化的順序.即使變數定義散布於方法定義之間,它們仍會在任何方法呼叫之前得到初始化.無論建立多少個物件,靜態資料只占用乙份儲存區域.靜態變數初始化只有在必要時才會執行,比如有類table,如果不建立table物件也不引用table的靜態方法,那麼類table的靜態變數...