碼農(nóng)生涯第一個(gè)項(xiàng)目————彩票管理系統(tǒng)(C語言Linux)<1.雙向循環(huán)通用鏈表的建立>

??????? 學(xué)習(xí)一個(gè)月c語言后所接觸的第一個(gè)項(xiàng)目,用ubuntu系統(tǒng)自帶的vim編寫的。作為之前只用過windows圖形界面的小白,使用linux操作系統(tǒng)還是略顯生疏,不過在編寫過一個(gè)相對(duì)完整的項(xiàng)目后,對(duì)終端的操作也變得駕輕就熟。

以下是項(xiàng)目的一些基本要求:

系統(tǒng)功能示例

需求:

1. 對(duì)用戶的管理:

對(duì)用戶鏈表的增、刪、改、查。

用戶能夠注冊(cè)、登陸、充值、查看個(gè)人信息、注銷

2. 對(duì)發(fā)行記錄的管理:

對(duì)發(fā)行記錄鏈表的增、查。

管理員能夠發(fā)行彩票、查詢發(fā)行的記錄

3. 對(duì)購(gòu)買記錄的管理:

對(duì)購(gòu)買記錄鏈表的增、查。

用戶能夠添加購(gòu)買記錄、查看購(gòu)買記錄


為了養(yǎng)成良好習(xí)慣,盡管項(xiàng)目相對(duì)簡(jiǎn)單,我仍然建立了工程目錄及makefile文件。

項(xiàng)目工程目錄

鏈表設(shè)立

首先確定了需要建立三條鏈表 分別儲(chǔ)存用戶信息、彩票購(gòu)買記錄、發(fā)行的彩票信息。

三個(gè)結(jié)構(gòu)體的定義:


用戶機(jī)構(gòu)體


發(fā)行彩票與購(gòu)票結(jié)構(gòu)體

鏈表結(jié)構(gòu)體的定義

我編寫了一條 雙向循環(huán)的通用鏈表 通過傳入三個(gè)結(jié)構(gòu)體生成了三條鏈表來保存數(shù)據(jù)。


雙向循環(huán)通用鏈表

其中 void* data 來指向所保存的數(shù)據(jù),因?yàn)閿?shù)據(jù)均為結(jié)構(gòu)體故在內(nèi)存空間是連續(xù)的,int size 表示這段數(shù)據(jù)的大小。通過不確定類型的指針void* 和 長(zhǎng)度 可以儲(chǔ)存不同類型的結(jié)構(gòu)體。

通用鏈表的功能實(shí)現(xiàn)

注釋解析:?? // 功能 / 傳入?yún)?shù) / 返回值

創(chuàng)建鏈表

通過需要保存的結(jié)構(gòu)體大小size,來創(chuàng)建一條新的鏈表。將size的值傳入鏈表,為以后添加節(jié)點(diǎn)做準(zhǔn)備。


添加節(jié)點(diǎn)

添加節(jié)點(diǎn)的函數(shù)中調(diào)用了兩次calloc,分別為節(jié)點(diǎn)和值域在堆上申請(qǐng)了空間。

由于是雙向循環(huán) 我這里使用了尾插法 要注意這里節(jié)點(diǎn)鏈接指針的賦值順序。30~34的順序不可更改。


遍歷打印鏈表

這里通過額外傳入一個(gè)打印函數(shù)的指針來確定鏈表中數(shù)據(jù)的打印方式。


釋放堆上空間

因?yàn)橹懊總€(gè)節(jié)點(diǎn)都調(diào)用了 兩次calloc, 故釋放的時(shí)候也需要調(diào)用兩次free分別對(duì)節(jié)點(diǎn)指針 和 值域指針進(jìn)行內(nèi)存釋放。


查找節(jié)點(diǎn)

相對(duì)于一般鏈表這里需要 傳入一個(gè)比較函數(shù) 來確定節(jié)點(diǎn)內(nèi)部數(shù)據(jù)的比較方法。


刪除節(jié)點(diǎn)

刪除與查找類似 依賴于傳入的比較函數(shù),還有不能忘記對(duì)77,78行對(duì)鏈接指針的修改。


排序

由于鏈表為雙向循環(huán)的,因此使用快速排序的方法。而且相對(duì)于選擇排序和冒泡排序,快速排序時(shí)間復(fù)雜度更低。

通過對(duì)鏈表內(nèi)部的值域指針的交換,達(dá)到數(shù)據(jù)排序的目的。

保存

運(yùn)用了c語言的文件讀寫,將鏈表中數(shù)據(jù)部分保存至 指定路徑的 二進(jìn)制文件。

加載

加載時(shí)注意退出時(shí)要釋放未使用的空間。(124~129行)


主函數(shù)中三條鏈表的建立與釋放

以上就是我針對(duì)該項(xiàng)目的鏈表建立。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容