版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2022-3-231第十七第十七 章章動(dòng)態(tài)存儲(chǔ)空間管理與動(dòng)態(tài)存儲(chǔ)空間管理與鏈表鏈表2022-3-232一、動(dòng)態(tài)存儲(chǔ)分配及常見函數(shù)說明隱式和顯式北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院32022-3-231. 引例n要處理學(xué)生成績(jī),需要用數(shù)組存放。但編程時(shí)并不知道運(yùn)行時(shí)需要處理多少學(xué)生成績(jī),每次處理的成績(jī)項(xiàng)數(shù)也可能不同。nint n;n.nscanf(%d, &n);ndouble scoresn; /* 不行!*/n. /* 讀入數(shù)據(jù),然后處理 */n不能用變量說明scores大小(必須靜態(tài)確定)。北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院42022-3-232. 問題的本質(zhì)及解決方案n問題的本質(zhì)n程序
2、運(yùn)行中需要使用存儲(chǔ),有時(shí)程序?qū)Υ鎯?chǔ)的需求量在寫程序時(shí)不能確定。n可能解決方案1)分析問題,定義適當(dāng)大小的數(shù)組。若分析正確,一般都能處理。但數(shù)據(jù)很多時(shí)程序就不能用。2)定義盡可能大的數(shù)組以滿足任何需要。浪費(fèi)大量存儲(chǔ)資源。如有多個(gè)這種數(shù)組就更難辦。系統(tǒng)可能無法容納幾個(gè)大數(shù)組,但實(shí)際上它們并不同時(shí)需要很大空間。n解決的辦法是“動(dòng)態(tài)存儲(chǔ)分配”。在程序運(yùn)行中做存儲(chǔ)分配工作。北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院52022-3-233. 動(dòng)態(tài)存儲(chǔ)分配n動(dòng)態(tài)存儲(chǔ)分配n根據(jù)運(yùn)行中的需要分配存儲(chǔ),取得存儲(chǔ)塊使用,稱為動(dòng)態(tài)存儲(chǔ)分配。在運(yùn)行中根據(jù)需要?jiǎng)討B(tài)進(jìn)行。n動(dòng)態(tài)存儲(chǔ)塊具有起始地址,地址可以存儲(chǔ)在指針里,因此可以借助于
3、指針保存存儲(chǔ)空間地址。n用指針指向存儲(chǔ)塊,間接使用被指存儲(chǔ)。訪問動(dòng)態(tài)分配存儲(chǔ)是指針的最重要用途。北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院62022-3-234. 動(dòng)態(tài)存儲(chǔ)釋放及存儲(chǔ)堆n動(dòng)態(tài)釋放n不用的動(dòng)態(tài)存儲(chǔ)塊應(yīng)交還系統(tǒng),動(dòng)態(tài)申請(qǐng)的內(nèi)存空間必須由程序代碼以顯式的方式主動(dòng)釋放。n動(dòng)態(tài)分配、釋放由動(dòng)態(tài)存儲(chǔ)管理系統(tǒng)完成,這是程序運(yùn)行系統(tǒng)的子系統(tǒng),管理著稱作堆(英文heap)的存儲(chǔ)區(qū)。n大部分常規(guī)語言都有這種機(jī)制。北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院72022-3-235. C語言的動(dòng)態(tài)存儲(chǔ)管理機(jī)制n用標(biāo)準(zhǔn)庫(kù)函數(shù)實(shí)現(xiàn)用標(biāo)準(zhǔn)庫(kù)函數(shù)實(shí)現(xiàn)nstdlib.hstdlib.hnmalloc.hmalloc.hn存儲(chǔ)分配函數(shù)
4、存儲(chǔ)分配函數(shù)malloc()malloc(),原型:,原型:nvoid void * *malloc(size_t n); /malloc(size_t n); /* *size_tsize_t是某整型是某整型* */ /n功能功能n分配一塊不小于分配一塊不小于n n的存儲(chǔ),返回其地址。無法的存儲(chǔ),返回其地址。無法滿足時(shí)返回空指針值。滿足時(shí)返回空指針值。北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院82022-3-23例int n; double int n; double * *data;data;. scanf(%d, &n);. scanf(%d, &n);data=(doubleda
5、ta=(double* *)malloc(n)malloc(n* *sizeof(double);sizeof(double);if (data = NULL) if (data = NULL) . / . /* * 分配未完成時(shí)的處理分配未完成時(shí)的處理 * */ / .datai.datai.* *(data+j)./(data+j)./* *正常處理正常處理* */ /北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院92022-3-23malloc說明nmalloc使用注意事項(xiàng):n的返回值(void*)應(yīng)通過類型強(qiáng)制轉(zhuǎn)為特定指針類型后賦給指針變量。n分配存儲(chǔ)塊大小應(yīng)該用sizeof計(jì)算n動(dòng)態(tài)分配必須檢查成
6、功與否n動(dòng)態(tài)分配的塊大小也是確定的。越界使用(尤其是越界賦值)是嚴(yán)重錯(cuò)誤,可能導(dǎo)致程序或系統(tǒng)垮臺(tái)北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院102022-3-236. callocn帶計(jì)數(shù)和清帶計(jì)數(shù)和清0 0的存儲(chǔ)分配函數(shù)的存儲(chǔ)分配函數(shù)calloccalloc,原型:,原型:nvoid void * *calloc(size_t n, size_t size);calloc(size_t n, size_t size);nsizesize是元素大小,是元素大小,n n是個(gè)數(shù)。是個(gè)數(shù)。n分配一塊存儲(chǔ),足夠存分配一塊存儲(chǔ),足夠存n n個(gè)大小為個(gè)大小為sizesize的元素,并的元素,并把元素把元素全部清全部清
7、0 0;n無法分配時(shí)返回空指針值。前面的存儲(chǔ)分配問題無法分配時(shí)返回空指針值。前面的存儲(chǔ)分配問題也可用下面語句實(shí)現(xiàn)也可用下面語句實(shí)現(xiàn)ndata = (doubledata = (double* *)calloc(n, sizeof(double);)calloc(n, sizeof(double);n主要差別主要差別nmallocmalloc對(duì)所分配的區(qū)域不做任何事情,對(duì)所分配的區(qū)域不做任何事情,calloccalloc對(duì)整個(gè)區(qū)對(duì)整個(gè)區(qū)域自動(dòng)清域自動(dòng)清0 0。北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院112022-3-237. 空間釋放函數(shù):freen為保證動(dòng)態(tài)存儲(chǔ)的有效使用,動(dòng)態(tài)分配塊不再用時(shí)應(yīng)釋放。動(dòng)
8、態(tài)存儲(chǔ)塊的釋放只能通過調(diào)用free完成。Memory leakn函數(shù)原型nvoid free(void *p);n功能nfree釋放p指的存儲(chǔ)塊。n注意n該塊必須是通過動(dòng)態(tài)存儲(chǔ)分配得到的,不要對(duì)并非指向動(dòng)態(tài)分配塊的指針用本操作np值為空時(shí)什么也不做n執(zhí)行free(p)后p值未變,被指塊可能已變。不允許再間接訪問已釋放存儲(chǔ)塊北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院122022-3-238. 8. 分配調(diào)整函數(shù)分配調(diào)整函數(shù)reallocn函數(shù)原型nvoid *realloc(void *p, size_t n);n功能n更改已有分配。p指原分配塊,n是新大小要求。n返回大小至少為n的存儲(chǔ)塊指針,新塊與原塊
9、一致:n新塊小時(shí)保存原塊n范圍內(nèi)數(shù)據(jù);n新塊大時(shí)原數(shù)據(jù)存在,新增部分不初始化。分配成功后原塊可能改變。n無法滿足時(shí)返回空指針,原塊不變。n常用寫法(防止分配失敗導(dǎo)致原存儲(chǔ)塊丟失) :nq = (double*)realloc(p, m * sizeof(double);nif (q = NULL) /*未成功,p仍指原塊,特殊處理*/ nelse p = q; /* 令p指向新塊,正常處理 */ .2022-3-2313二、動(dòng)態(tài)存儲(chǔ)空間管理如果動(dòng)態(tài)申請(qǐng)了許多同類型緩沖區(qū),該如何管理?北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院142022-3-23方法1:指針數(shù)組(地址數(shù)組)n設(shè)置一段內(nèi)存空間,例如數(shù)組,
10、用來保存存儲(chǔ)空間的起始地址。n數(shù)組中每個(gè)元素用來保存某種類型的存儲(chǔ)空間的地址,等于每個(gè)元素都是一個(gè)指針變量。nint *pnarr10; /定義一個(gè)長(zhǎng)度為10的整型指針數(shù)組(整型地址數(shù)組)nchar *psz5; /定義一個(gè)長(zhǎng)度為5的字符指針數(shù)組。0 x0012ff7d0 x0012ff800 x0012fe12其中每個(gè)元素都用來保存某種類型的存儲(chǔ)空間的地址北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院152022-3-23例如n設(shè)一個(gè)班最多有50人,但每個(gè)班的人數(shù)不定,為了表示這50用戶,可以定義如下指針數(shù)組nstruct UserAccount *Accounts 50;n完成如下功能n初始化指針數(shù)組n
11、將新生成的某個(gè)班用戶加入班級(jí)用戶集,并存放在空位置上。n將某個(gè)班指定用戶號(hào)的用戶刪除n給某個(gè)班所有女生發(fā)m元補(bǔ)助n將新生成的某個(gè)班用戶插入到指定位置i上,i后面的用戶順序往后退。北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院162022-3-23指針數(shù)組結(jié)構(gòu)示例0 x0012ff6dNULL0 x0012ff800 x0012ce000 x0012fe12 張帥帥110108M0.10 李美美350108F500.00 趙小飛360108M20.00 羅小花410108F88.200 x0012ff6d0 x0012ff800 x0012ce000 x0012fe12長(zhǎng)度為50空指針,可能曾被刪除后續(xù)元素或
12、空或不空Accounts北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院172022-3-23功能實(shí)現(xiàn)n初始化指針數(shù)組void InitAccounts(struct UserAccount *Accounts, int nLen) for (int i = 0; i nLen; i+) Accountsi = NULL;n尋找一個(gè)空位置返回,-1表示無空位置int FindEmptyPlace(struct UserAccount *Accounts, int nLen) /可以有不同的搜索策略NULLNULL北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院182022-3-23功能實(shí)現(xiàn)(續(xù))n將新用戶放在空位置上,不成功
13、返回-1,成功返回位置號(hào)int AddNewAccountAtAnyEmptyPlace(struct UserAccount *Accounts, int nLen, struct UserAccount *pUser) int nPlace;if (nPlace = FindEmptyPlace(Accounts, nLen) = -1) return -1; AccountsnPlace = pUser; /完成放置操作 return nPlace; /返回位置北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院192022-3-23功能示例0 x0012ff6dNULL0 x0012ff800 x0012
14、ce000 x0012fe12 張帥帥110108M0.10 李美美350108F500.00 趙小飛360108M20.00 羅小花410108F88.200 x0012ff6d0 x0012ff800 x0012ce000 x0012fe12長(zhǎng)度為50Accounts 孫悟空110105M600.100 x0012ff300 x0012ff30新找到的空位新結(jié)點(diǎn)孫悟空?qǐng)?bào)到北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院202022-3-23功能實(shí)現(xiàn)(續(xù))n將指定用戶號(hào)的用戶刪除,返回該用戶原來所在位置int DeleteAccountByNumber(struct UserAccount *Account
15、s, int nLen, char *pszUserNO) int i; for (i = 0; i szUserNO) = 0) free(Accountsi); /釋放空間 Accountsi = NULL; /將當(dāng)前位置置空 return i; return -1;用戶結(jié)構(gòu)體指針數(shù)組數(shù)組長(zhǎng)度用戶號(hào)字符串比較函數(shù)北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院212022-3-23刪除功能示例0 x0012ff6d0 x0012ff300 x0012ff800 x0012ce000 x0012fe12 張帥帥110108M0.10 李美美350108F500.00 趙小飛360108M20.00 羅小花4
16、10108F88.200 x0012ff6d0 x0012ff800 x0012ce000 x0012fe12Accounts 孫悟空110105M600.100 x0012ff30NULL把孫悟空位置找到把孫悟空開除:DeleteAccountByNumber(Accounts, 50, “”)釋放存儲(chǔ)空間北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院222022-3-23功能實(shí)現(xiàn)(續(xù))n給指定性別的群體充值,返回充值人數(shù)int ChargeByGender(struct UserAccount *Accounts, int nLen, char cGender, double dAmount) int
17、nCounter = 0; /計(jì)數(shù)器 for (int i = 0; i cGender = cGender) Accountsi-dBalance+= dAmount; nCounter+; return nCounter;ChargeByGender(Accounts, 50, F, 10.0);/婦女節(jié)發(fā)補(bǔ)助北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院232022-3-23方法2:鏈接結(jié)構(gòu)n采用鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)n一環(huán)扣一扣,通過一個(gè)元素保存的其它元素的地址找到其它元素。n通過鏈接結(jié)構(gòu)實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)n增加元素:在鐵鏈的某個(gè)位置加一鐵環(huán)n刪除元素:去掉鐵鏈的某一鐵環(huán)n問題n鐵鏈中的每一鐵環(huán)是一樣的嗎?n普通的
18、鐵鏈?zhǔn)菃蜗虻倪€是雙向的?n有沒有一些特殊的鐵鏈,比如有多個(gè)分叉的?n鐵鏈可以跟銅鏈拴一起嗎?n鐵鏈的頭部可以拴在柱子上嗎?北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院242022-3-23鏈接結(jié)構(gòu)實(shí)現(xiàn)原理n鏈接結(jié)構(gòu)中的元素需要保存的信息n與結(jié)點(diǎn)本身有關(guān)的信息n找到其它元素所需要的信息n這些信息可以組織成結(jié)構(gòu)n問題:如何找到其它元素?n保存其它元素在內(nèi)存中的地址n在結(jié)構(gòu)中設(shè)置指針分量,用來保存其它元素的地址的分量指針分量n問題:指針的類型?n需要指向元素的結(jié)構(gòu)類型的指針類型n如果需要指向的元素與本元素的類型相同的話,則需要定義自引用的結(jié)構(gòu)類型。北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院252022-3-23鏈接結(jié)構(gòu)n
19、一個(gè)結(jié)構(gòu)元素可以通過指針引用同類或不同類的結(jié)構(gòu)元素,多個(gè)結(jié)構(gòu)元素通過指針建立聯(lián)系。n指向結(jié)構(gòu)的指針稱為鏈接,形成的復(fù)雜數(shù)據(jù)結(jié)構(gòu)稱為鏈接結(jié)構(gòu)n最簡(jiǎn)單的鏈接結(jié)構(gòu)n線性鏈接形成的表,鏈接表。n每個(gè)自引用結(jié)構(gòu)有一個(gè)鏈接指針分量。北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院262022-3-23最簡(jiǎn)單的鏈接結(jié)構(gòu):?jiǎn)蜗蜴湵韓單向鏈接表就像鏈條,自引用結(jié)構(gòu)是鏈表中的一個(gè)鏈節(jié),稱為鏈表結(jié)點(diǎn),結(jié)點(diǎn)間由指針連接形成整個(gè)結(jié)構(gòu)。n所有結(jié)點(diǎn)(結(jié)構(gòu))由動(dòng)態(tài)分配創(chuàng)建。n從指向表首結(jié)點(diǎn)的指針出發(fā),沿鏈接可順序訪問表中各結(jié)點(diǎn)。該指針代表整個(gè)表。通常把最后結(jié)點(diǎn)的指針置空表示結(jié)束。0北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院272022-3-23000
20、00000更復(fù)雜的引用鏈接結(jié)構(gòu)北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院282022-3-23單向鏈表結(jié)構(gòu)示例struct UserAccount char UserNO15; char Name20; char ID19; char Gender; double Balance;struct UserAccount *pNextUser;用來保存下一個(gè)結(jié)點(diǎn)的地址此處改成如下形式是否可行,為什么?struct UserAccount NextUser;北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院292022-3-23普通單向鏈表示意圖 張帥帥110108M0.10 趙小飛360108M20.00 羅小花410108
21、F88.20 李美美350108F500.00NULLHeadTail2022-3-2330三、鏈表北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院312022-3-231. 需求n設(shè)有某系統(tǒng)的用戶信息結(jié)構(gòu)體,其中n用戶ID長(zhǎng)度為10n用戶姓名長(zhǎng)度不超過10n需要處理的用戶數(shù)據(jù)不定,n假設(shè)某程序需要以鏈表方式處理用戶的數(shù)據(jù)北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院322022-3-23普通單向鏈表示意DataDataDataDataNULLHeadTail北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院332022-3-23鏈表結(jié)點(diǎn)結(jié)構(gòu)聲明方法1:struct UserInfoNodechar szID11;/IDchar szNam
22、e11;/姓名 struct UserInfoNode *pNextUser; /下個(gè)用戶指針;方法2:typedef struct UserInfoNode USERNODE, *USERPOINTER;struct UserInfoNodechar szID11;/IDchar szName11;/姓名 USERPOINTER *pNextUser;/下個(gè)用戶指針;北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院342022-3-23更好的方法:基本信息單獨(dú)說明/用戶基本信息結(jié)構(gòu)聲明struct UserInfochar szID11;/ID,11個(gè)字符個(gè)字符char szName11;/姓名,姓名,11
23、個(gè)字符個(gè)字符;或typedef structchar szID11;/ID,11個(gè)字符個(gè)字符char szName11;/姓名,姓名,11個(gè)字符個(gè)字符 USERINFO;北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院352022-3-23更常見合理的聲明方法方法3:struct UserLinkNode struct UserInfo Data;/數(shù)據(jù)數(shù)據(jù) struct UserLinkNode *pNextUser; /;struct UserInfo UserInfoArr100;或typedef struct USERINFO Data;/數(shù)據(jù)結(jié)點(diǎn)數(shù)據(jù)結(jié)點(diǎn) struct UserLinkNode *p
24、NextUser; / USERLINKNODE ;北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院362022-3-23增加一個(gè)鏈表描述信息結(jié)點(diǎn)NumberHeadTailDataDataDataDataNULLLinkInfoNoden關(guān)于鏈表整體描述信息結(jié)點(diǎn)北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院372022-3-23描述結(jié)點(diǎn)結(jié)構(gòu)說明示例struct UserLinkstruct UserLinkNode *pHead; /頭指針頭指針 struct UserLinkNode *pTail; /尾指針尾指針int nNumber;/鏈表中的結(jié)點(diǎn)計(jì)數(shù)鏈表中的結(jié)點(diǎn)計(jì)數(shù);或typedef struct USERLIN
25、KNODE *pHead; /頭指針頭指針 USERLINKNODE *pTail; /尾指針尾指針int nNumber;/鏈表中的結(jié)點(diǎn)計(jì)數(shù)鏈表中的結(jié)點(diǎn)計(jì)數(shù) USERLINK;北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院382022-3-23可以增加一個(gè)不用的頭結(jié)點(diǎn)NumberHeadTailDataDataDataNULLLinkInfoNoden目的在于寫程序方便,簡(jiǎn)化一些鏈表操作,數(shù)據(jù)結(jié)構(gòu)課程中會(huì)有進(jìn)一步的闡述不用的不用的頭結(jié)點(diǎn)頭結(jié)點(diǎn)北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院392022-3-23關(guān)于后面的操作的假定n鏈表為單向鏈表n沒有設(shè)置空的頭結(jié)點(diǎn)n設(shè)置有信息描述結(jié)點(diǎn),記錄如下信息n頭結(jié)點(diǎn)n尾結(jié)點(diǎn)n鏈表
26、中結(jié)點(diǎn)個(gè)數(shù)北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院402022-3-23在鏈表中增加一個(gè)節(jié)點(diǎn)n有幾種增加方式n將新結(jié)點(diǎn)作為最后一個(gè)元素增加到鏈表的尾部,n將新結(jié)點(diǎn)作為第一個(gè)元素增加到鏈表的頭部n將新結(jié)點(diǎn)按照某種次序要求插入到指定位置北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院412022-3-23加到尾部n如果鏈表為空,則需要做一些初始化工作,將新的結(jié)點(diǎn)當(dāng)成頭結(jié)點(diǎn)和尾結(jié)點(diǎn)n如果鏈表不為空,則將該結(jié)點(diǎn)作為尾結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn),修改尾結(jié)點(diǎn)指針。n如果沒有記錄尾結(jié)點(diǎn)指針,則需要從頭結(jié)點(diǎn)開始找到最后一個(gè)結(jié)點(diǎn)。pHeadpTailDataDataNULLpNewNode NULL 北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院422022
27、-3-23示例代碼,加到尾部int AddUserToTail( struct UserLink *pUsers, /鏈表描述信息指針 struct UserLinkNode *pNewUser/新結(jié)點(diǎn)指針) if (pUsers = NULL | pNewUser = NULL) return -1;if (pUsers-nNumber pHead = pNewUser; pUsers-pTail = pUsers-pHead; /頭尾指針指向同一個(gè)結(jié)點(diǎn) else/把結(jié)點(diǎn)信息附到鏈表尾部 pUsers-pTail-pNext = pNewUser; /加到尾到 pUsers-pTail =
28、pNewUser;/修改尾結(jié)點(diǎn)指針 pUsers-pTail-pNext = NULL;/最后一個(gè)結(jié)點(diǎn)的后繼置空pUsers-nNumber+;/計(jì)數(shù)加1return 0;北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院432022-3-23加到頭部n如果鏈表為空,則需要做一些初始化工作,將新的結(jié)點(diǎn)當(dāng)成頭結(jié)點(diǎn)和尾結(jié)點(diǎn)n如果鏈表不為空,需要將新結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn)置為原來的頭結(jié)點(diǎn),并把新結(jié)點(diǎn)作為頭結(jié)點(diǎn)pHeadpTailDataDataNULLNULLpNewNode 北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院442022-3-23示例代碼,加到頭部int AddUserToHead( struct UserLink *pU
29、sers, /鏈表描述信息指針 struct UserLinkNode *pNewUser/新結(jié)點(diǎn)指針) if (pUsers = NULL | pNewUser = NULL) return -1;if (pUsers-nNumber pHead = pNewUser; pUsers-pTail = pUsers-pHead; /頭尾指針指向同一個(gè)結(jié)點(diǎn) pNewUser-pNext = NULL; else/把結(jié)點(diǎn)信息附到鏈表頭部 pUsers-pNewUser-pNext = pUsers-pHead ; /加到頭部 pUsers-pHead = pNewUser;/修改頭結(jié)點(diǎn)指針 pUsers-nNumber+;/計(jì)數(shù)加1return 0;北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院452022-3-23在鏈
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智能城市建設(shè)內(nèi)部股權(quán)轉(zhuǎn)讓協(xié)議范本
- 2025年度商業(yè)空間窗簾設(shè)計(jì)、安裝及后期維護(hù)合同4篇
- 2025年美團(tuán)電商平臺(tái)用戶隱私保護(hù)與數(shù)據(jù)安全協(xié)議
- 2025版小區(qū)房屋裝修智能家居系統(tǒng)安全評(píng)估與認(rèn)證合同2篇
- 2025年度新能源項(xiàng)目用地承包及轉(zhuǎn)讓合同協(xié)議書4篇
- 2025年度門窗行業(yè)環(huán)保檢測(cè)與認(rèn)證服務(wù)合同4篇
- 二零二五年度外教合同終止與清算協(xié)議合同
- 二零二五年度土地租賃合同(農(nóng)業(yè)開發(fā))4篇
- 二零二五年度錨具市場(chǎng)推廣合作合同4篇
- 展會(huì)現(xiàn)場(chǎng)觀眾組織與服務(wù)合同(2025版)2篇
- 2024年秋季學(xué)期學(xué)校辦公室工作總結(jié)
- 鋪大棚膜合同模板
- 長(zhǎng)亭送別完整版本
- 2024年英語高考全國(guó)各地完形填空試題及解析
- 智能養(yǎng)老院視頻監(jiān)控技術(shù)方案
- 你比我猜題庫(kù)課件
- 無人駕駛航空器安全操作理論復(fù)習(xí)測(cè)試附答案
- 建筑工地春節(jié)留守人員安全技術(shù)交底
- 默納克-NICE1000技術(shù)交流-V1.0
- 蝴蝶蘭的簡(jiǎn)介
- 老年人心理健康量表(含評(píng)分)
評(píng)論
0/150
提交評(píng)論