版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、v結(jié)構(gòu)體的概述結(jié)構(gòu)體的概述v結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型的定義v結(jié)構(gòu)體類型的變量結(jié)構(gòu)體類型的變量v結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組v結(jié)構(gòu)體作為函數(shù)的參數(shù)結(jié)構(gòu)體作為函數(shù)的參數(shù)v鏈表鏈表v打印學(xué)生成績單打印學(xué)生成績單 ,格式如下:,格式如下:學(xué)號學(xué)號姓名姓名語文成績語文成績數(shù)學(xué)成績數(shù)學(xué)成績英語成績英語成績.00001張三張三96948800003李四李四89707600004王五王五908778如何在程序中表示這組學(xué)生信息?如何在程序中表示這組學(xué)生信息?v用二維的數(shù)組來表示用二維的數(shù)組來表示該方案不可行,因為這些信息有不同的類型該方案不可行,因為這些信息有不同的類型v每一列用一個一維數(shù)組來表示,這種方法每一列用
2、一個一維數(shù)組來表示,這種方法稱為并聯(lián)數(shù)組。稱為并聯(lián)數(shù)組。要保證每位學(xué)生信息的完整性和正確性很難要保證每位學(xué)生信息的完整性和正確性很難v當(dāng)我們考慮怎么邏輯地組織數(shù)據(jù)時,應(yīng)該將一當(dāng)我們考慮怎么邏輯地組織數(shù)據(jù)時,應(yīng)該將一個人的所有信息項放在一起,即保持相關(guān)性。個人的所有信息項放在一起,即保持相關(guān)性。學(xué)號學(xué)號姓名姓名語文成績語文成績 數(shù)學(xué)成績數(shù)學(xué)成績 英語成績英語成績.00001張三張三96948800003李四李四89707600004王五王五908778學(xué)學(xué)生生一一00001張三張三969488學(xué)學(xué)生生二二00003李四李四897076學(xué)學(xué)生生三三00004王五王五908778記錄記錄在在C+中稱
3、為結(jié)構(gòu)體中稱為結(jié)構(gòu)體v結(jié)構(gòu)體類型允許程序員把一些分量聚合結(jié)構(gòu)體類型允許程序員把一些分量聚合成一個整體,用一個變量表示。成一個整體,用一個變量表示。v一個結(jié)構(gòu)體的各個分量都有名字,把這一個結(jié)構(gòu)體的各個分量都有名字,把這些分量稱為成員些分量稱為成員(member)。v由于結(jié)構(gòu)體的成員可以是各種類型的,由于結(jié)構(gòu)體的成員可以是各種類型的,程序員能創(chuàng)建適合于問題的數(shù)據(jù)集合。程序員能創(chuàng)建適合于問題的數(shù)據(jù)集合。v定義一個新的結(jié)構(gòu)體類型定義一個新的結(jié)構(gòu)體類型 v定義新類型的變量定義新類型的變量 v訪問結(jié)構(gòu)體變量訪問結(jié)構(gòu)體變量 v結(jié)構(gòu)體的概述結(jié)構(gòu)體的概述v結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型的定義v結(jié)構(gòu)體類型的變量結(jié)構(gòu)體
4、類型的變量v結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組v結(jié)構(gòu)體作為函數(shù)的參數(shù)結(jié)構(gòu)體作為函數(shù)的參數(shù)v鏈表鏈表v定義結(jié)構(gòu)體類型中包括哪些分量定義結(jié)構(gòu)體類型中包括哪些分量v格式:格式:struct 結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名字段聲明;字段聲明;如:如:struct studentT char no10; char name10; int chinese; int math; int english; ;v字段名可與程序中的變量名相同字段名可與程序中的變量名相同 v在不同的結(jié)構(gòu)體中可以有相同的字段名在不同的結(jié)構(gòu)體中可以有相同的字段名 v結(jié)構(gòu)體成員的類型可以是任意類型,當(dāng)結(jié)構(gòu)體成員的類型可以是任意類型,當(dāng)然也可以是結(jié)構(gòu)體類型然
5、也可以是結(jié)構(gòu)體類型struct dateTint month;int day;int year;struct studentT.dateT birthday; v結(jié)構(gòu)體的概述結(jié)構(gòu)體的概述v結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型的定義v結(jié)構(gòu)體類型的變量結(jié)構(gòu)體類型的變量v結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組v結(jié)構(gòu)體作為函數(shù)的參數(shù)結(jié)構(gòu)體作為函數(shù)的參數(shù)v鏈表鏈表v結(jié)構(gòu)體變量的定義結(jié)構(gòu)體變量的定義v結(jié)構(gòu)體類型的引用結(jié)構(gòu)體類型的引用v指向結(jié)構(gòu)體的指針指向結(jié)構(gòu)體的指針v動態(tài)分配結(jié)構(gòu)體的空間動態(tài)分配結(jié)構(gòu)體的空間 v結(jié)構(gòu)體變量的定義和普通的變量定義一樣。結(jié)構(gòu)體變量的定義和普通的變量定義一樣。如定義了結(jié)構(gòu)體類型如定義了結(jié)構(gòu)體類型studen
6、tT,就可以定義結(jié),就可以定義結(jié)構(gòu)體變量:構(gòu)體變量: studentT student1;v一旦定義了一個結(jié)構(gòu)體類型的變量,系統(tǒng)在一旦定義了一個結(jié)構(gòu)體類型的變量,系統(tǒng)在分配內(nèi)存時就會分配一塊連續(xù)的空間,依次分配內(nèi)存時就會分配一塊連續(xù)的空間,依次存放它的每一個分量。這塊空間總的名字就存放它的每一個分量。這塊空間總的名字就是結(jié)構(gòu)體變量的名字。內(nèi)部還有各自的名字是結(jié)構(gòu)體變量的名字。內(nèi)部還有各自的名字 englishmathchinesenamenostudent1結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化studentT student1= “00001”,“張三張三” ,87,90,77; struct
7、 結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名 字段聲明;字段聲明; 結(jié)構(gòu)體變量;結(jié)構(gòu)體變量;struct 字段聲明;字段聲明; 結(jié)構(gòu)體變量;結(jié)構(gòu)體變量;區(qū)別:前者可以繼續(xù)用結(jié)構(gòu)體類型名定義變量v結(jié)構(gòu)體變量的定義結(jié)構(gòu)體變量的定義v結(jié)構(gòu)體類型的引用結(jié)構(gòu)體類型的引用v指向結(jié)構(gòu)體的指針指向結(jié)構(gòu)體的指針v動態(tài)分配結(jié)構(gòu)體的空間動態(tài)分配結(jié)構(gòu)體的空間 結(jié)構(gòu)體變量的訪問結(jié)構(gòu)體變量的訪問成員的表示:成員的表示: 結(jié)構(gòu)變量名結(jié)構(gòu)變量名.成員名成員名 如如: 如結(jié)構(gòu)中還有結(jié)構(gòu),則一級一級用如結(jié)構(gòu)中還有結(jié)構(gòu),則一級一級用”.”分開分開 ,如,如如:如:student1.birthday.yearv對結(jié)構(gòu)體類型
8、變量的引用一般為引用他對結(jié)構(gòu)體類型變量的引用一般為引用他的成員的成員 結(jié)構(gòu)變量的賦值結(jié)構(gòu)變量的賦值v結(jié)構(gòu)體是一個統(tǒng)稱。每個結(jié)構(gòu)體類型在使用前都要先定義結(jié)構(gòu)體是一個統(tǒng)稱。每個結(jié)構(gòu)體類型在使用前都要先定義自己有哪些分量。系統(tǒng)事先無法知道如何處理他。自己有哪些分量。系統(tǒng)事先無法知道如何處理他。v因此,結(jié)構(gòu)體變量的賦值通常是通過對它的每一個成員的因此,結(jié)構(gòu)體變量的賦值通常是通過對它的每一個成員的賦值而實現(xiàn)。如:輸入賦值而實現(xiàn)。如:輸入student1的內(nèi)容可用的內(nèi)容可用: cin student1.no student1.chinese student1.math stud
9、ent1.english student1.birthday.year student1.birthday.month student1.birthday.day;v同類型的結(jié)構(gòu)變量之間可以相互賦值,如同類型的結(jié)構(gòu)變量之間可以相互賦值,如student1 = student2;將將student2的成員對應(yīng)賦給的成員對應(yīng)賦給student1的成員的成員結(jié)構(gòu)變量的輸出結(jié)構(gòu)變量的輸出v結(jié)構(gòu)體變量的輸出通常是通過輸出它的每一結(jié)構(gòu)體變量的輸出通常是通過輸出它的每一個成員而實現(xiàn)。如:輸出個成員而實現(xiàn)。如:輸出student1的內(nèi)容可的內(nèi)容可用用: cout student1.no student1.na
10、me student1.chinese student1.math student1.english student1.birthday.year student1.birthday.month 成員成員 如:如:sp-namestudent1.成員成員 -是所有運算符中優(yōu)先級最高的是所有運算符中優(yōu)先級最高的 通常程序員習(xí)慣使用第二種方法通常程序員習(xí)慣使用第二種方法v結(jié)構(gòu)體變量的定義結(jié)構(gòu)體變量的定義v結(jié)構(gòu)體類型的引用結(jié)構(gòu)體類型的引用v指向結(jié)構(gòu)體的指針指向結(jié)構(gòu)體的指針v動態(tài)分配結(jié)構(gòu)體的空間動態(tài)分配結(jié)構(gòu)體的空間 v指向結(jié)構(gòu)體指針的另一種用法是存儲動指向結(jié)構(gòu)體指針的另一種用法是存儲動態(tài)申請到的內(nèi)存的
11、首地址。用法和申請態(tài)申請到的內(nèi)存的首地址。用法和申請普通的動態(tài)變量一樣。如:普通的動態(tài)變量一樣。如: studentT *sp; sp = new studentT;v結(jié)構(gòu)體的概述結(jié)構(gòu)體的概述v結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型的定義v結(jié)構(gòu)體類型的變量結(jié)構(gòu)體類型的變量v結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組v結(jié)構(gòu)體作為函數(shù)的參數(shù)結(jié)構(gòu)體作為函數(shù)的參數(shù)v鏈表鏈表 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組v用于描述個體的集合用于描述個體的集合v定義格式:定義格式: studentT studentArraySIZE;結(jié)構(gòu)體數(shù)組的引用結(jié)構(gòu)體數(shù)組的引用v引用數(shù)組的某一成員的成員引用數(shù)組的某一成員的成員 studentAv數(shù)組成員
12、之間相互賦值數(shù)組成員之間相互賦值 studentArray4 = studentArray2v結(jié)構(gòu)數(shù)組的初始化結(jié)構(gòu)數(shù)組的初始化 studentT studentArray5 = “00001”, 張三張三“, 80, 90,98 , , , ;統(tǒng)計候選人得票。設(shè)有三個候選人,每次輸入一個統(tǒng)計候選人得票。設(shè)有三個候選人,每次輸入一個得票的候選人名字,要求最后輸出各人得票結(jié)果。得票的候選人名字,要求最后輸出各人得票結(jié)果。 struct personT int id; int count; leader3= 0, 0, 1, 0, 2, 0; int main() int i, inputID; f
13、or (i=1; i inputID; if (inputID 2) cout “廢票廢票”;continue; leaderinputID.count += 1; cout endl; for (i=0; i3; +i) cout leaderi.id “ “ leaderi.count); return 0; v與普通的指針一樣,指向結(jié)構(gòu)體的指針與普通的指針一樣,指向結(jié)構(gòu)體的指針也能夠用來指向一個結(jié)構(gòu)體數(shù)組。此時,也能夠用來指向一個結(jié)構(gòu)體數(shù)組。此時,對指針加對指針加1就是加了該結(jié)構(gòu)體的大小。就是加了該結(jié)構(gòu)體的大小。v結(jié)構(gòu)體的概述結(jié)構(gòu)體的概述v結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型的定義v結(jié)構(gòu)體類型的變
14、量結(jié)構(gòu)體類型的變量v結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組v結(jié)構(gòu)體作為函數(shù)的參數(shù)結(jié)構(gòu)體作為函數(shù)的參數(shù)v鏈表鏈表v盡管結(jié)構(gòu)體和數(shù)組一樣也有許多分量組盡管結(jié)構(gòu)體和數(shù)組一樣也有許多分量組成,但結(jié)構(gòu)體的傳遞和普通內(nèi)置類型是成,但結(jié)構(gòu)體的傳遞和普通內(nèi)置類型是一樣的。它是將實際參數(shù)中的每個分量一樣的。它是將實際參數(shù)中的每個分量復(fù)制到形式參數(shù)的每個分量中。復(fù)制到形式參數(shù)的每個分量中。Void printPerson(PersonT p)v因為結(jié)構(gòu)體是值傳遞,當(dāng)希望把函數(shù)內(nèi)部對結(jié)構(gòu)因為結(jié)構(gòu)體是值傳遞,當(dāng)希望把函數(shù)內(nèi)部對結(jié)構(gòu)體的修改返回給主調(diào)函數(shù)時,可以用指針傳遞或體的修改返回給主調(diào)函數(shù)時,可以用指針傳遞或引用傳遞引用傳遞v由于
15、結(jié)構(gòu)體一般占用的內(nèi)存量都比較大,值傳遞由于結(jié)構(gòu)體一般占用的內(nèi)存量都比較大,值傳遞既浪費空間又浪費時間。因此可用指針傳遞或引既浪費空間又浪費時間。因此可用指針傳遞或引用傳遞用傳遞v指針傳遞形式比較繁瑣,所以指針傳遞形式比較繁瑣,所以C+C+通常用引用傳遞通常用引用傳遞v引用傳遞的問題是函數(shù)中可以修改實際參數(shù),要引用傳遞的問題是函數(shù)中可以修改實際參數(shù),要控制函數(shù)中不能修改實際參數(shù),可以加控制函數(shù)中不能修改實際參數(shù),可以加constconst限定限定v和普通的指和普通的指針傳遞一樣,針傳遞一樣,函數(shù)中可以函數(shù)中可以通過指針訪通過指針訪問主調(diào)函數(shù)問主調(diào)函數(shù)的記錄的記錄v減少函數(shù)調(diào)減少函數(shù)調(diào)用時的數(shù)據(jù)用
16、時的數(shù)據(jù)傳遞量傳遞量Void PrintPerson(personT &p);Void PrintPerson(const personT &p);v設(shè)計一函數(shù),打印學(xué)生信息設(shè)計一函數(shù),打印學(xué)生信息Void PrintStudent(studentT s)cout s.no t t s.chinese t s.math t s.english endl;缺點:浪費時間空間缺點:浪費時間空間Void PrintStudent(studentT *s) cout no t name t chinese t math t english endl;Void PrintS
17、tudent(studentT &s) cout s.no t t s.chinese t s.math t s.english endl;缺點:不安全缺點:不安全Void PrintStudent(const studentT &s)cout s.no t t s.chinese t s.math t s.english data = x; / 把把x放入新節(jié)點的數(shù)據(jù)成員中放入新節(jié)點的數(shù)據(jù)成員中tmp-next = p-next; / 把新節(jié)點和把新節(jié)點和p的下一成員相連的下一成員相連p-next = tmp; /把把p和新節(jié)點連接起來和新節(jié)點連接
18、起來 單鏈表操作單鏈表操作刪除刪除把結(jié)點把結(jié)點p后的結(jié)點刪除后的結(jié)點刪除headpdelPtr delPtr=p-next;p-next=delPtr-next;delete delPtr; 單鏈表操作單鏈表操作-建立建立v定義頭指針:定義頭指針:linkRec *head;v建立頭結(jié)點建立頭結(jié)點申請空間申請空間設(shè)為頭結(jié)點設(shè)為頭結(jié)點 head單鏈表操作單鏈表操作-建立建立(續(xù))(續(xù))v逐個從鍵盤輸入數(shù)據(jù),存入鏈表逐個從鍵盤輸入數(shù)據(jù),存入鏈表 接受輸入接受輸入申請空間申請空間輸入數(shù)據(jù)放入申請到的空間輸入數(shù)據(jù)放入申請到的空間鏈入鏈表尾鏈入鏈表尾 v置鏈表結(jié)束標(biāo)志置鏈表結(jié)束標(biāo)志headabcd he
19、ad = new linkRec;rear = head;cin in_data;while (輸入未結(jié)束輸入未結(jié)束) p = new linkRec; p-data = in_data; rear-next = p; rear = p; cin in_data; rear-next = NULL; 單鏈表操作單鏈表操作輸出輸出headabcd p = head-next;while ( p != NULL) cout data; p = p-next; #include using namespace std; struct linkRec int data; linkRec *next;i
20、nt main() int x; /存放輸入的值存放輸入的值 linkRec *head, *p, *rear; head = rear = new linkRec; while (true) /創(chuàng)建鏈表的其他結(jié)點創(chuàng)建鏈表的其他結(jié)點 cin x; if (x = 0) break; p = new linkRec; p-data = x; rear-next = p; rear = p; rear-next = NULL;/設(shè)置設(shè)置rear為表尾,其后沒有結(jié)點了為表尾,其后沒有結(jié)點了 /讀鏈表讀鏈表 cout next; while (p != NULL) cout data next; co
21、ut data data) c = a; a = a-next; else c = b; b = b-next; p = c; while (a != NULL & b != NULL) if (a-data data) p-next = a; a = a-next; else p-next = b; b = b-next; p = p-next; if (a = NULL) p-next = b; else p-next = a; return (c); 1. comment: Bp.r is an auxiliary array2. sp, tq+1, kp3. while sq and tr4. if AsAt then5. BkAs6. ss+17. else8. BkAt9. tt+110. end if11. kk+112. endwhile13. if s=q+1 then Bk.rAt.r14. else Bk.rAs.q15. endif16. Ap.rBp.r數(shù)組段Ap.q和Aq+1.r都為升序,使Ap,r為升序v鏈表的概念鏈表的概念v鏈表的存儲鏈表的存儲v鏈表的操作鏈表的操作v鏈表的應(yīng)用鏈表的應(yīng)用v循環(huán)鏈表循環(huán)鏈表例:例:n個人圍成一圈,從第一個人開始報數(shù)個人圍成一圈,從第一個人開始
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度門窗行業(yè)環(huán)保材料采購與認(rèn)證合同4篇
- 二零二五版門面房買賣協(xié)議包含物業(yè)管理責(zé)任及安全保障合同3篇
- 二零二五年度房屋裝修工程承包合同風(fēng)險控制策略4篇
- 二零二五版酒店訂餐服務(wù)質(zhì)量提升合同6篇
- 二零二五版二手房買賣合同中關(guān)于房屋租賃權(quán)及轉(zhuǎn)租條款4篇
- 二零二五年度電子存單質(zhì)押貸款服務(wù)合同4篇
- 二零二五年度專業(yè)廚房設(shè)備研發(fā)、生產(chǎn)與銷售合同4篇
- 二零二五年度高??蒲薪?jīng)費監(jiān)管與服務(wù)合同范本4篇
- 二零二五版餐飲廚房特色菜品研發(fā)及推廣合作協(xié)議3篇
- 2025年度茶葉產(chǎn)品包裝研發(fā)與生產(chǎn)合同4篇
- 勞務(wù)投標(biāo)技術(shù)標(biāo)
- 研發(fā)管理咨詢項目建議書
- 濕瘡的中醫(yī)護(hù)理常規(guī)課件
- 轉(zhuǎn)錢委托書授權(quán)書范本
- 一種配網(wǎng)高空作業(yè)智能安全帶及預(yù)警系統(tǒng)的制作方法
- 某墓園物業(yè)管理日常管護(hù)投標(biāo)方案
- 蘇教版六年級數(shù)學(xué)上冊集體備課記載表
- NUDD新獨難異 失效模式預(yù)防檢查表
- 內(nèi)蒙古匯能煤電集團(tuán)有限公司長灘露天煤礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
- 22S702 室外排水設(shè)施設(shè)計與施工-鋼筋混凝土化糞池
- 2013日產(chǎn)天籟全電路圖維修手冊45車身控制系統(tǒng)
評論
0/150
提交評論