第8章數(shù)據(jù)封裝結(jié)構(gòu)體ppt課件_第1頁
第8章數(shù)據(jù)封裝結(jié)構(gòu)體ppt課件_第2頁
第8章數(shù)據(jù)封裝結(jié)構(gòu)體ppt課件_第3頁
第8章數(shù)據(jù)封裝結(jié)構(gòu)體ppt課件_第4頁
第8章數(shù)據(jù)封裝結(jié)構(gòu)體ppt課件_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 1v構(gòu)造體的概述構(gòu)造體的概述v構(gòu)造體類型的定義構(gòu)造體類型的定義v構(gòu)造體類型的變量構(gòu)造體類型的變量v構(gòu)造體數(shù)組構(gòu)造體數(shù)組v構(gòu)造體作為函數(shù)的參數(shù)構(gòu)造體作為函數(shù)的參數(shù)v鏈表鏈表程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 2v打印學(xué)生成果單 ,格式如下:學(xué)號學(xué)號姓名姓名語文成績語文成績數(shù)學(xué)成績數(shù)學(xué)成績英語成績英語成績.00001張三張三96948800003李四李四89707600004王五王五908778如何在程序中表示這組學(xué)生信息?如何在程序中表示這組學(xué)生信息?程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 3v用二維的數(shù)組來表示用二

2、維的數(shù)組來表示v該方案不可行,由于這些信息有不同的類該方案不可行,由于這些信息有不同的類型型v每一列用一個一維數(shù)組來表示,這種方法每一列用一個一維數(shù)組來表示,這種方法稱為并聯(lián)數(shù)組。稱為并聯(lián)數(shù)組。v要保證每位學(xué)生信息的正確性很難要保證每位學(xué)生信息的正確性很難程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 4v當(dāng)我們思索怎樣邏輯地組織數(shù)據(jù)時,應(yīng)該將一個人的一切信息項放在一同,即堅持相關(guān)性。學(xué)號學(xué)號姓名姓名語文成績語文成績 數(shù)學(xué)成績數(shù)學(xué)成績 英語成績英語成績.00001張三張三96948800003李四李四89707600004王五王五908778程序設(shè)計 cs.sjtu 2011.9程序設(shè)計

3、- 5學(xué)學(xué)生生一一00001張三張三969488學(xué)學(xué)生生二二00003李四李四897076學(xué)學(xué)生生三三00004王五王五908778記錄記錄在在C+中稱為構(gòu)造體中稱為構(gòu)造體程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 6v構(gòu)造體類型允許程序員把一些分量聚合構(gòu)造體類型允許程序員把一些分量聚合成一個整體,用一個變量表示。成一個整體,用一個變量表示。v一個構(gòu)造體的各個分量都有名字,把這一個構(gòu)造體的各個分量都有名字,把這些分量稱為成員些分量稱為成員(member)。v由于構(gòu)造體的成員可以是各種類型的,由于構(gòu)造體的成員可以是各種類型的,程序員能創(chuàng)建適宜于問題的數(shù)據(jù)聚合。程序員能創(chuàng)建適宜于問題的數(shù)據(jù)

4、聚合。程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 7v定義一個新的構(gòu)造體類型定義一個新的構(gòu)造體類型 v定義新類型的變量定義新類型的變量 v訪問構(gòu)造體變量訪問構(gòu)造體變量 程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 8v構(gòu)造體的概述構(gòu)造體的概述v構(gòu)造體類型的定義構(gòu)造體類型的定義v構(gòu)造體類型的變量構(gòu)造體類型的變量v構(gòu)造體數(shù)組構(gòu)造體數(shù)組v構(gòu)造體作為函數(shù)的參數(shù)構(gòu)造體作為函數(shù)的參數(shù)v鏈表鏈表程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 9v定義構(gòu)造體類型中包括哪些分量定義構(gòu)造體類型中包括哪些分量v格式:格式:vstruct 構(gòu)造體類型名構(gòu)造體類型名v字段聲明;字段聲明;v;如:如:s

5、truct studentT char no10; char name10; int chinese; int math; int english; ;程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 10v字段名可與程序中的變量名一樣字段名可與程序中的變量名一樣 v在不同的構(gòu)造體中可以有一樣的字段名在不同的構(gòu)造體中可以有一樣的字段名 v構(gòu)造體成員的類型可以是恣意類型,當(dāng)構(gòu)造體成員的類型可以是恣意類型,當(dāng)然也可以是構(gòu)造體類型然也可以是構(gòu)造體類型程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 11struct dateTint month;int day;int year;struct s

6、tudentT.dateT birthday; 程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 12v構(gòu)造體的概述構(gòu)造體的概述v構(gòu)造體類型的定義構(gòu)造體類型的定義v構(gòu)造體類型的變量構(gòu)造體類型的變量v構(gòu)造體數(shù)組構(gòu)造體數(shù)組v構(gòu)造體作為函數(shù)的參數(shù)構(gòu)造體作為函數(shù)的參數(shù)v鏈表鏈表程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 13v構(gòu)造體變量的定義構(gòu)造體變量的定義v構(gòu)造體類型的援用構(gòu)造體類型的援用v指向構(gòu)造體的指針指向構(gòu)造體的指針v動態(tài)分配構(gòu)造體的空間動態(tài)分配構(gòu)造體的空間 程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 14v構(gòu)造體變量的定義和普通的變量定義一樣。構(gòu)造體變量的定義和普通的變量定

7、義一樣。如定義了構(gòu)造體類型如定義了構(gòu)造體類型studentT,就可以定義構(gòu),就可以定義構(gòu)造體變量:造體變量:v studentT student1;v一旦定義了一個構(gòu)造體類型的變量,系統(tǒng)在一旦定義了一個構(gòu)造體類型的變量,系統(tǒng)在分配內(nèi)存時就會分配一塊延續(xù)的空間,依次分配內(nèi)存時就會分配一塊延續(xù)的空間,依次存放它的每一個分量。這塊空間總的名字就存放它的每一個分量。這塊空間總的名字就是構(gòu)造體變量的名字。內(nèi)部還有各自的名字是構(gòu)造體變量的名字。內(nèi)部還有各自的名字 englishmathchinesenamenostudent1程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 15studentT stu

8、dent1= “00001,“張三張三 ,87,90,77; 程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 16struct 構(gòu)造體類型名構(gòu)造體類型名 字段聲明;字段聲明; 構(gòu)造體變量;構(gòu)造體變量;struct 字段聲明;字段聲明; 構(gòu)造體變量;構(gòu)造體變量;區(qū)別:前者可以繼續(xù)用構(gòu)造體類型名定義變量程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 17v構(gòu)造體變量的定義構(gòu)造體變量的定義v構(gòu)造體類型的援用構(gòu)造體類型的援用v指向構(gòu)造體的指針指向構(gòu)造體的指針v動態(tài)分配構(gòu)造體的空間動態(tài)分配構(gòu)造體的空間 程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 18構(gòu)造體變量的訪問構(gòu)造體變量的訪問成員的

9、表示:成員的表示: 構(gòu)造變量名構(gòu)造變量名.成員名成員名 如如: 如構(gòu)造中還有構(gòu)造,那么一級一級用如構(gòu)造中還有構(gòu)造,那么一級一級用.分開分開 ,如如如:如:student1.birthday.yearv對構(gòu)造體類型變量的援用普通為援用他對構(gòu)造體類型變量的援用普通為援用他的成員的成員 程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 19v構(gòu)造體是一個統(tǒng)稱。每個構(gòu)造體類型在運用前都要先定義構(gòu)造體是一個統(tǒng)稱。每個構(gòu)造體類型在運用前都要先定義本人有哪些分量。系統(tǒng)事先無法知道如何處置他。本人有哪些分量。系統(tǒng)事先無法知道如何處置他。v因此,構(gòu)造體變量的賦值通常是經(jīng)過對它的每一

10、個成員的因此,構(gòu)造體變量的賦值通常是經(jīng)過對它的每一個成員的賦值而實現(xiàn)。如:輸入賦值而實現(xiàn)。如:輸入student1的內(nèi)容可用:的內(nèi)容可用: vcin student1.no v student1.chinese student1.mathv student1.englishv student1.birthday.yearv student1.birthday.monthv student1.birthday.day;v同類型的構(gòu)造變量之間可以相互賦值,如同類型的構(gòu)造變量之間可以相互賦值,如vStudent1 = student2;v將將student2的成員對應(yīng)賦給的

11、成員對應(yīng)賦給student1的成員的成員程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 20v構(gòu)造體變量的輸出通常是經(jīng)過輸出它的每一構(gòu)造體變量的輸出通常是經(jīng)過輸出它的每一個成員而實現(xiàn)。如:輸出個成員而實現(xiàn)。如:輸出student1的內(nèi)容可的內(nèi)容可用:用: vcout student1.no v student1.chinese student1.mathv student1.englishv student1.birthday.yearv student1.birthday.monthv 成員成員 如:如:sp-namestudent1.成員成員 -是一切運算符中

12、優(yōu)先級最高的是一切運算符中優(yōu)先級最高的 通常程序員習(xí)慣運用第二種方法通常程序員習(xí)慣運用第二種方法程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 24v構(gòu)造體變量的定義構(gòu)造體變量的定義v構(gòu)造體類型的援用構(gòu)造體類型的援用v指向構(gòu)造體的指針指向構(gòu)造體的指針v動態(tài)分配構(gòu)造體的空間動態(tài)分配構(gòu)造體的空間 程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 25v指向構(gòu)造體指針的另一種用法是存儲動指向構(gòu)造體指針的另一種用法是存儲動態(tài)懇求到的內(nèi)存的首地址。用法和懇求態(tài)懇求到的內(nèi)存的首地址。用法和懇求普通的動態(tài)變量一樣。如:普通的動態(tài)變量一樣。如:v studentT *sp;v sp = new stud

13、entT;程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 26v構(gòu)造體的概述構(gòu)造體的概述v構(gòu)造體類型的定義構(gòu)造體類型的定義v構(gòu)造體類型的變量構(gòu)造體類型的變量v構(gòu)造體數(shù)組構(gòu)造體數(shù)組v構(gòu)造體作為函數(shù)的參數(shù)構(gòu)造體作為函數(shù)的參數(shù)v鏈表鏈表程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 27 v用于描畫個體的集合用于描畫個體的集合v定義格式:定義格式:v studentT studentArraySIZE;程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 28v援用數(shù)組的某一成員的成員援用數(shù)組的某一成員的成員v studentAv數(shù)組成員之間相互賦值數(shù)組成員之間相互賦值v

14、studentArray4 = studentArray2v構(gòu)造數(shù)組的初始化構(gòu)造數(shù)組的初始化 v studentT studentArray5 = “00001, 張三張三“, 80, 90,98 , , , ;程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 29統(tǒng)計候選人得票。設(shè)有三個候選人,每次輸入一個統(tǒng)計候選人得票。設(shè)有三個候選人,每次輸入一個得票的候選人名字,要求最后輸出各人得票結(jié)果。得票的候選人名字,要求最后輸出各人得票結(jié)果。 struct personT int id; int count; leader3= 0, 0, 1, 0, 2, 0; 程序設(shè)計 cs.sjtu 201

15、1.9程序設(shè)計 - 30int main() int i, j, inputID; for (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; 程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 31v與普通的指針一樣,指向構(gòu)造體的指針也與普通的指針一樣,指向構(gòu)造體的指針也可以用來指向一個構(gòu)造體數(shù)組。此時,對可以用來指向一個構(gòu)造體數(shù)組。此時,

16、對指針加指針加1就是加了該構(gòu)造體的大小。就是加了該構(gòu)造體的大小。程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 32v構(gòu)造體的概述構(gòu)造體的概述v構(gòu)造體類型的定義構(gòu)造體類型的定義v構(gòu)造體類型的變量構(gòu)造體類型的變量v構(gòu)造體數(shù)組構(gòu)造體數(shù)組v構(gòu)造體作為函數(shù)的參數(shù)構(gòu)造體作為函數(shù)的參數(shù)v鏈表鏈表程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 33v雖然構(gòu)造體和數(shù)組一樣也有許多分量組雖然構(gòu)造體和數(shù)組一樣也有許多分量組成,但構(gòu)造體的傳送和普通內(nèi)置類型是成,但構(gòu)造體的傳送和普通內(nèi)置類型是一樣的。它是將實踐參數(shù)中的每個分量一樣的。它是將實踐參數(shù)中的每個分量復(fù)制到方式參數(shù)的每個分量中。復(fù)制到方式參數(shù)的每個分

17、量中。程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 34Void printPerson(PersonT p)程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 35v由于構(gòu)造體是值傳送,當(dāng)希望把函數(shù)內(nèi)部對構(gòu)造由于構(gòu)造體是值傳送,當(dāng)希望把函數(shù)內(nèi)部對構(gòu)造體的修正前往給主調(diào)函數(shù)時,可以用指針傳送或體的修正前往給主調(diào)函數(shù)時,可以用指針傳送或援用傳送援用傳送v由于構(gòu)造體普通占用的內(nèi)存量都比較大,值傳送由于構(gòu)造體普通占用的內(nèi)存量都比較大,值傳送既浪費空間又浪費時間。因此可用指針傳送或援既浪費空間又浪費時間。因此可用指針傳送或援用傳送用傳送v指針傳送方式比較繁瑣,所以指針傳送方式比較繁瑣,所以C+C

18、+通常用援用傳送通常用援用傳送v援用傳送的問題是函數(shù)中可以修正實踐參數(shù),要援用傳送的問題是函數(shù)中可以修正實踐參數(shù),要控制函數(shù)中不能修正實踐參數(shù),可以加控制函數(shù)中不能修正實踐參數(shù),可以加constconst限定限定程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 36v和普通的指和普通的指針傳送一樣,針傳送一樣,函數(shù)中可以函數(shù)中可以經(jīng)過指針訪經(jīng)過指針訪問主調(diào)函數(shù)問主調(diào)函數(shù)的記錄的記錄v減少函數(shù)調(diào)減少函數(shù)調(diào)用時的數(shù)據(jù)用時的數(shù)據(jù)傳送量傳送量Void PrintPerson(personT &p);Void PrintPerson(const personT &p);程序設(shè)計 cs.sjtu 201

19、1.9程序設(shè)計 - 37v設(shè)計一函數(shù),打印學(xué)生信息設(shè)計一函數(shù),打印學(xué)生信息程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 38Void PrintStudent(studentT s)cout s.no t t s.chinese t s.math t s.english endl;缺陷:浪費時間空間缺陷:浪費時間空間程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 39Void PrintStudent(studentT *s) cout no t name t chinese t math t english endl;Void PrintStudent(student

20、T &s) cout s.no t t s.chinese t s.math t s.english endl;缺陷:不平安缺陷:不平安程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 40Void 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é)點銜接起來

21、和新節(jié)點銜接起來 程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 52把結(jié)點把結(jié)點p后的結(jié)點刪除后的結(jié)點刪除headpdelPtr delPtr=p-next;p-next=delPtr-next;delete delPtr; 程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 53v定義頭指針:定義頭指針:linkRec *head;v建立頭結(jié)點建立頭結(jié)點v懇求空間懇求空間v設(shè)為頭結(jié)點設(shè)為頭結(jié)點 head程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 54v逐個從鍵盤輸入數(shù)據(jù),存入鏈表逐個從鍵盤輸入數(shù)據(jù),存入鏈表 v接受輸入接受輸入v懇求空間懇求空間v輸入數(shù)據(jù)放入懇求到的空間輸入數(shù)據(jù)

22、放入懇求到的空間v鏈入鏈表尾鏈入鏈表尾 v置鏈表終了標(biāo)志置鏈表終了標(biāo)志headabcd 程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 55head = new linkRec;rear = head;Cin in_data;while(輸入未終了輸入未終了) p= new linkRec; p-data = in_data; rear-next = p; rear=p; cin in_data; rear-next = NULL; 程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 56headabcd p = head-next;while ( p != NULL) cout data

23、; p = p-next; 程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 57#include using namespace std; struct linkRec int data; linkRec *next;程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 58int 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

24、-data = x; rear-next = p; rear = p; rear-next = NULL;/設(shè)置設(shè)置rear為表尾,其后沒有結(jié)點了為表尾,其后沒有結(jié)點了 /讀鏈表讀鏈表 cout next; while (p != NULL) cout data next; cout endl; return 0;程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 59v鏈表的概念鏈表的概念v鏈表的存儲鏈表的存儲v鏈表的操作鏈表的操作v循環(huán)鏈表循環(huán)鏈表程序設(shè)計 cs.sjtu 2011.9程序設(shè)計 - 60例:例:n個人圍成一圈,從第一個人開場報數(shù)個人圍成一圈,從第一個人開場報數(shù)1、2、3。凡報到。凡報到 3者退出圈子。找出最后留在圈子中的人的序號。者退

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論