第三節 大秦帝國的連坐與鍊錶(一)

2021-08-20 06:11:41 字數 2388 閱讀 7779

孫皓暉先生在《大秦帝國(第一部)》中講到:

烈酒下喉,衛鞅精神為之一振,「《治秦九論》乃衛鞅謀劃的變法大綱。其一《田論》,立定廢井田、開阡陌、田得買賣之法令……其五《郡縣論》,將秦國舊世族的自治封地一律取締,設郡縣兩級官府,直轄於國府之下,使全國治權一統,如臂使指。其六《連坐論》,縣下設裡、村、甲**小吏。民以十戶為一甲,一人犯罪,十戶連坐,使民眾怯於私斗犯罪而勇於公戰立功。」

連坐制就是一條**的繩子,把「鄉里鄉親」們串聯起來。

(連坐制確實在特定的歷史條件下發揮了巨大的作用,之後一系列的制度安排又將大秦帝國拖入了深淵。)

連坐制本身就像乙個鍊錶(linked list ),乙個個的人串聯起來,形成一種獨特的結構。

儲存資料的時候我們通常用的是陣列,陣列最大的特點就是可以通過下標快速查詢,也就是便於檢索。

但對於線性表(陣列和鍊錶都屬於線性表)常見的插入操作,陣列就有些力不從心了。

為了在陣列中插入乙個資料,需要移動後面所有的資料!

鍊錶正是為了快速插入的問題。

鍊錶每乙個節點都由資料域指向下乙個節點的指標構成;

多個節點首尾相連,構成線性表。

上一節《第二節、演算法中的公平——佇列》我們講到了結構體,忘記結構體的定義的同學可以出門左轉,檢視上一節。

這裡,我們就使用結構體表示鍊錶,struct list_node就是鍊錶的乙個節點,包含乙個資料域和乙個指向下乙個節點的指標。

typedef

struct list_node single_list;

這裡的struct list_node的用法與上一節的不同,使用typedef,大括號後面也有single_list。

這樣以後在定義struct list_node變數的時候就不用寫一大長串了,直接single_list就可以了。

//下面兩種方式等價

struct list_node node;

single_list node;

與此同時,為了實現便於插入資料的要求,鍊錶的長度必須是可變的,否則可能沒有空間插入!

所以,鍊錶的初始化以及插入操作需要申請儲存空間,函式為malloc()函式,用來分配儲存空間。對應的有釋放儲存空間,使用free()函式。

由於專案執行結束後會自動**儲存空間,所以對於小專案而言,可以不手動**,有興趣可以搜尋free()函式的用法。

下面的**生成了乙個最開始的乙個節點,資料data儲存的是5,因為接下來沒有資料,所以next指標指向空null。

#include //malloc函式需要使用這個標頭檔案

single_list *node = null; //1、定義頭指標

node = (single_list *)malloc(sizeof(single_list)); //2、分配記憶體空間

node->data = 5; //3、給鍊錶節點的資料賦值

node->next = null; //4、將鍊錶的指標域指向空

我們可以printf列印資料,檢視結果。

完整**:

/*

輸出:5

*/#include

#include

#include

typedef

struct list_node

single_list;

int main()

這裡我們使用了->這個運算子,叫做結構體指標運算子,用來表示結構體內部的指標指向空間儲存的資料,比較拗口,看個例子就知道了。

//兩者等價,省了個括號!程式設計師都是偷懶的!

node->data = 5;

(*node).data=5;

鍊錶的插入、刪除、遍歷操作,我們下一節再見!

第三節 資料與編碼

第三節 資料與編碼 一 進製 一 基本概念 數制即表示數值的方法,有非進製數和進製數兩種。在計算機數制中,需要掌握數碼 基數和位權 的概念。數碼 數制中表示基本數值大小的不同數字符號。在一種數制中,只能使用一組固定的符號來表示 數的大小。例如,十進位制有 10 個數碼,分別為 0,1,2,3,4,5...

C 的第三節課

計算機如何儲存資訊,按值儲存的資料的資料型別,包括int uint,long ulong,char,float,double,bool,decimal,byte,sbyte.字元值和數字值之間的異同,如何宣告和初始化變數。byte有帶有符號形式 sbyte 和無符號形式 byte 計算機並不能識別字...

第三節 變數的解構賦值

es6允許按照一定的模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構。簡單的陣列解構 以前,為變數賦值,我們只能直接指定值。比如下面的 let a 0 let b 1 let c 2 而現在我們可以用陣列解構的方式來進行賦值。let a,b,c 1,2,3 陣列模式和賦值模式統一 可以簡單的...