《工學(xué)結(jié)構(gòu)體》ppt課件_第1頁
《工學(xué)結(jié)構(gòu)體》ppt課件_第2頁
《工學(xué)結(jié)構(gòu)體》ppt課件_第3頁
《工學(xué)結(jié)構(gòu)體》ppt課件_第4頁
《工學(xué)結(jié)構(gòu)體》ppt課件_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、一、結(jié)構(gòu)體數(shù)組一、結(jié)構(gòu)體數(shù)組形式一形式一: :間接定義間接定義 struct int num; char name20; ; stu2;numnamenumnamestu0stu124Bstu形式二形式二: :直接定義直接定義 struct int num; char name20;stu2;形式三形式三: :無名定義無名定義 struct int num; char name20;stu2;結(jié)構(gòu)數(shù)組的初始化 順序初始化順序初始化: : struct int num; char name20; int age; ; stu =200401,“Wang Yong”, 19, 200402,“Li

2、 Gang”, 20; 初始值的初始值的、和和必須與其對應(yīng)必須與其對應(yīng)的結(jié)構(gòu)成員一致的結(jié)構(gòu)成員一致 如果對所有數(shù)組元素如果對所有數(shù)組元素賦初值賦初值, ,則數(shù)組元素則數(shù)組元素個數(shù)可省略。個數(shù)可省略。分行分行初始化初始化: : struct int num; char name20; int age; ; stu = 200401,“Wang Yong”, 19 200402,“Li Gang”, 20 ; 結(jié)構(gòu)數(shù)組的引用:結(jié)構(gòu)數(shù)組名下標 成員名 (結(jié)構(gòu)數(shù)組元素 成員名)例如:stu0.num struct int num; char name20; char sex; int age; stu

3、3;stu1.age+;;strcpy(, “ZhaoDa”);cinstu1.num; EXAMPLE 2. . . Sort by student aver#include #include #include using namespace std;struct Gradeint s1;int s2;int s3;float aver;struct StudentRecint num;string name;Grade s; typedef struct StudentRec STUDENT; STUDENT inputstu( int ); vo

4、id sort( STUDENT stu , int ); void main() STUDENT stu 6 ; for( int i=0; i6; i+) stu i = inputstu( i ); sort ( stu, 6); coutsetprecision(4)showpoint=0; i- )cout6-i: stu i .num setw(6)left stu i .name stu i .s.averendl;聲明結(jié)構(gòu)體聲明結(jié)構(gòu)體數(shù)組數(shù)組用結(jié)構(gòu)體數(shù)用結(jié)構(gòu)體數(shù)組名作實參組名作實參 void sort( STUDENT stu , int n) int i, j, min; S

5、TUDENT t; for ( i=0; in; i+ ) min=i; for( j=i+1; jn; j+) if ( stu j .s.aver num指向結(jié)構(gòu)成員運算符指向結(jié)構(gòu)成員運算符優(yōu)先級和優(yōu)先級和“ ”同級別同級別結(jié)合性是結(jié)合性是 指針不僅可以指向普通變量、數(shù)組、 數(shù)組元素、函數(shù),同樣的,指針也可以指向,我們把指向結(jié)構(gòu)變量的指針稱為。結(jié)構(gòu)指針指向了結(jié)構(gòu)變量所在存儲空間的。v定義形式: *結(jié)構(gòu)指針名; ;v使用結(jié)構(gòu)指針引用結(jié)構(gòu)成員:(*結(jié)構(gòu)指針) 成員名:結(jié)構(gòu)指針成員名v結(jié)構(gòu)指針的運算:1.指向結(jié)構(gòu)變量的指針(*s).nums-num 常用運算符的優(yōu)先級順序: 運算符( - .)

6、運算符( ! + - - * & sizeof (類型) ) 運算符運算符運算符 條件符運算符運算符 訪問結(jié)構(gòu)變量中的結(jié)構(gòu)成員共有訪問結(jié)構(gòu)變量中的結(jié)構(gòu)成員共有: 結(jié)構(gòu)變量結(jié)構(gòu)變量. .成員名成員名 stu.num stu.num ( (* *結(jié)構(gòu)指針結(jié)構(gòu)指針).).成員名成員名 ( (* *s).nums).num 結(jié)構(gòu)指針結(jié)構(gòu)指針-成員名成員名 s-num s-num 指針不僅可以指向普通變量、數(shù)組、 數(shù)組元素、函數(shù),同樣的,指針也可以指向,我們把指向結(jié)構(gòu)變量的指針稱為。結(jié)構(gòu)指針指向了結(jié)構(gòu)變量所在存儲空間的。v定義形式: *結(jié)構(gòu)指針名; ;v使用結(jié)構(gòu)指針引用結(jié)構(gòu)成員:(*結(jié)構(gòu)指針)

7、成員名:結(jié)構(gòu)指針成員名v結(jié)構(gòu)指針的運算:1.指向結(jié)構(gòu)變量的指針(*s).nums-num 結(jié)構(gòu)指針指向的是結(jié)構(gòu)變量所在存儲空間的首地址。將結(jié)構(gòu)指針,則指針指向內(nèi)存中,其地址的增加量取決于指針所指向的結(jié)構(gòu)的長度。 coutnum; coutnum+; coutnum; coutnum; 在C+語言中,把指向結(jié)構(gòu)數(shù)組或數(shù)組元素的指針稱為。 #include struct int num; char name20; float score; ;2.指向結(jié)構(gòu)體數(shù)組的指針 例例 使用結(jié)構(gòu)數(shù)組指針輸出數(shù)據(jù) void main( ) stu3=1001,Liu Jin,75, 1002,Li Lan,82,

8、 1003,Ma Kai,80 ; *s=stu; coutNum Name Scoreendl; for(;sstu+3;s+) coutnum name score nump1- scorep1- next 建立鏈表的過程:首先利用new運算符,在內(nèi)存中開辟一個存儲空間,用來存放新結(jié)點。使p1,p2都指向該存儲空間,然后從鍵盤上輸入一個學(xué)生的數(shù)據(jù)進行判斷,如果輸入的p1-num不等于0,而且是第一個結(jié)點數(shù)據(jù)(n1),則把p1的值賦給head(head=p1)(head=p1),這樣,結(jié)構(gòu)指針head就指向了鏈表中的第一個結(jié)點第一個結(jié)點。p2p1(n=1)建立表頭結(jié)點建立表頭結(jié)點000189

9、.5p2p1000189.5然后利用new再開辟一個新的存儲空間,用來存放另一個結(jié)點,并使p1指向新開辟的存儲空間新開辟的存儲空間,然后輸入該結(jié)點的數(shù)據(jù)。如果輸入的p1-num不等于0,而且不是第一個結(jié)點(n1)時,則應(yīng)將新建結(jié)點與前一個結(jié)點連接在一起,即:執(zhí)行p2 - next=p1,使第一個結(jié)點的next 成員指向第二個結(jié)點。 接著使p2p1,即:使p2指向剛剛建立的結(jié)點剛剛建立的結(jié)點(即建立鏈表進程中的最后一個結(jié)點最后一個結(jié)點) 。建立中間結(jié)點建立中間結(jié)點(n=2)p2p1000189.5然后利用new再開辟一個新的存儲空間,用來存放另一個結(jié)點,并使p1指向新開辟的存儲空間新開辟的存儲空

10、間,然后輸入該結(jié)點的數(shù)據(jù)。如果輸入的p1-num不等于0,而且不是第一個結(jié)點(n1)時,則應(yīng)將新建結(jié)點與前一個結(jié)點連接在一起,即:執(zhí)行p2 - next=p1,使第一個結(jié)點的next 成員指向第二個結(jié)點。 接著使p2p1,即:使p2指向剛剛建立的結(jié)點剛剛建立的結(jié)點(即建立鏈表進程中的最后一個結(jié)點最后一個結(jié)點) 。建立中間結(jié)點建立中間結(jié)點(n=2)000276p2p1000189.5然后利用new再開辟一個新的存儲空間,用來存放另一個結(jié)點,并使p1指向新開辟的存儲空間新開辟的存儲空間,然后輸入該結(jié)點的數(shù)據(jù)。如果輸入的p1-num不等于0,而且不是第一個結(jié)點(n1)時,則應(yīng)將新建結(jié)點與前一個結(jié)點連

11、接在一起,即:執(zhí)行p2 - next=p1,使第一個結(jié)點的next 成員指向第二個結(jié)點。 接著使p2p1,即:使p2指向剛剛建立的結(jié)點剛剛建立的結(jié)點(即建立鏈表進程中的最后一個結(jié)點最后一個結(jié)點) 。建立中間結(jié)點建立中間結(jié)點(n=2)000276p2p1000189.5然后利用new再開辟一個新的存儲空間,用來存放另一個結(jié)點,并使p1指向新開辟的存儲空間新開辟的存儲空間,然后輸入該結(jié)點的數(shù)據(jù)。如果輸入的p1-num不等于0,而且不是第一個結(jié)點(n1)時,則應(yīng)將新建結(jié)點與前一個結(jié)點連接在一起,即:執(zhí)行p2 - next=p1,使第一個結(jié)點的next 成員指向第二個結(jié)點。 接著使p2p1,即:使p2

12、指向剛剛建立的結(jié)點剛剛建立的結(jié)點(即建立鏈表進程中的最后一個結(jié)點最后一個結(jié)點) 。(n=2)000276p2000189.5000276重復(fù)步驟 ,依次建立若干個新結(jié)點。每次都讓p1指向新建立的結(jié)點,p2指向鏈表中最后一個結(jié)點,然后用“p2-next=p1”,把p1所指的結(jié)點連接到p2所指結(jié)點的后面。當輸入某個結(jié)點數(shù)據(jù)后,如果p1-num等于0,則不再執(zhí)行上述循環(huán),此新結(jié)點不應(yīng)該被連接到鏈表中,用語句“p2-next=NULL”,將NULL值賦給前一個結(jié)點的next成員。 至此,建立鏈表的過程結(jié)束。p1(n=2)p2000189.5000276重復(fù)步驟 ,依次建立若干個新結(jié)點。每次都讓p1指向

13、新建立的結(jié)點,p2指向鏈表中最后一個結(jié)點,然后用“p2-next=p1”,把p1所指的結(jié)點連接到p2所指結(jié)點的后面。當輸入某個結(jié)點數(shù)據(jù)后,如果p1-num等于0,則不再執(zhí)行上述循環(huán),此新結(jié)點不應(yīng)該被連接到鏈表中,用語句“p2-next=NULL”,將NULL值賦給前一個結(jié)點的next成員。 至此,建立鏈表的過程結(jié)束。p1000388p2000189.5000276重復(fù)步驟 ,依次建立若干個新結(jié)點。每次都讓p1指向新建立的結(jié)點,p2指向鏈表中最后一個結(jié)點,然后用“p2-next=p1”,把p1所指的結(jié)點連接到p2所指結(jié)點的后面。當輸入某個結(jié)點數(shù)據(jù)后,如果p1-num等于0,則不再執(zhí)行上述循環(huán),此

14、新結(jié)點不應(yīng)該被連接到鏈表中,用語句“p2-next=NULL”,將NULL值賦給前一個結(jié)點的next成員。 至此,建立鏈表的過程結(jié)束。p1000388p2000189.5000276重復(fù)步驟 ,依次建立若干個新結(jié)點。每次都讓p1指向新建立的結(jié)點,p2指向鏈表中最后一個結(jié)點,然后用“p2-next=p1”,把p1所指的結(jié)點連接到p2所指結(jié)點的后面。當輸入某個結(jié)點數(shù)據(jù)后,如果p1-num等于0,則不再執(zhí)行上述循環(huán),此新結(jié)點不應(yīng)該被連接到鏈表中,用語句“p2-next=NULL”,將NULL值賦給前一個結(jié)點的next成員。 至此,建立鏈表的過程結(jié)束。00038800p1建立表尾結(jié)點建立表尾結(jié)點str

15、uct student * creat( ) student *head,*p1,*p2; head = NULL; /在沒有創(chuàng)建任何結(jié)點時,表頭指向空在沒有創(chuàng)建任何結(jié)點時,表頭指向空 p1 = new student; /創(chuàng)建一個新結(jié)點創(chuàng)建一個新結(jié)點 -(1) p2 = p1; cinp1-nump1-score; /*輸入第一個結(jié)點的輸入第一個結(jié)點的 學(xué)生數(shù)據(jù)學(xué)生數(shù)據(jù)*/p2p1000189.5p2p1000189.5(n=1)建立表頭結(jié)點建立表頭結(jié)點while(p1-num != 0) / -(2) n +; if (n = 1) head = p1; / 將鏈表中第一個新建結(jié)點作為表頭

16、將鏈表中第一個新建結(jié)點作為表頭 else p2-next = p1; p2 = p1; p1 = new(student); / 新建一個結(jié)點新建一個結(jié)點 cinp1-nump1-score; delete p1; p2-next =NULL; return head; /返回表頭指針返回表頭指針 /end creatwhile(p1-num != 0) / -(2) n +; if (n = 1) head = p1; / 將鏈表中第一個新建結(jié)點作為表頭將鏈表中第一個新建結(jié)點作為表頭 else p2-next = p1; p2 = p1; p1 = new(student); / 新建一個結(jié)

17、點新建一個結(jié)點 cinp1-nump1-score; delete p1; p2-next =NULL; return head; /返回表頭指針返回表頭指針 /end creatp2000189.5建立中間結(jié)點建立中間結(jié)點(n=2)000276p1000189.5(n=2)000276p1p2while(p1-num != 0) / -(2) n +; if (n = 1) head = p1; / 將鏈表中第一個新建結(jié)點作為表頭將鏈表中第一個新建結(jié)點作為表頭 else p2-next = p1; p2 = p1; p1 = new(student); / 新建一個結(jié)點新建一個結(jié)點 cinp

18、1-nump1-score; delete p1; p2-next =NULL; return head; /返回表頭指針返回表頭指針 /end creat000189.5000276p2p1000388while(p1-num != 0) / -(2) n +; if (n = 1) head = p1; / 將鏈表中第一個新建結(jié)點作為表頭將鏈表中第一個新建結(jié)點作為表頭 else p2-next = p1; p2 = p1; p1 = new(student); / 新建一個結(jié)點新建一個結(jié)點 cinp1-nump1-score; delete p1; p2-next =NULL; retur

19、n head; /返回表頭指針返回表頭指針 /end creat000189.5000276p200038800p1while(p1-num != 0) / -(2) n +; if (n = 1) head = p1; / 將鏈表中第一個新建結(jié)點作為表頭將鏈表中第一個新建結(jié)點作為表頭 else p2-next = p1; p2 = p1; p1 = new(student); / 新建一個結(jié)點新建一個結(jié)點 cinp1-nump1-score; delete p1; p2-next =NULL; return head; /返回表頭指針返回表頭指針 /end creat000189.50002

20、76p2000388p1NULL建立表尾結(jié)點建立表尾結(jié)點while(p1-num != 0) / -(2) n +; if (n = 1) head = p1; / 將鏈表中第一個新建結(jié)點作為表頭將鏈表中第一個新建結(jié)點作為表頭 else p2-next = p1; p2 = p1; p1 = new(student); / 新建一個結(jié)點新建一個結(jié)點 cinp1-nump1-score; delete p1; p2-next =NULL; return head; /返回表頭指針返回表頭指針 /end creat 輸出鏈表就是將鏈表中各結(jié)點的數(shù)據(jù)依次輸出。首先要知道鏈表第一個結(jié)點的地址,也就是要

21、知道表頭結(jié)點head的值,然后依次通過各結(jié)點next的值找到下一個結(jié)點,就可以依次輸出所有結(jié)點的數(shù)據(jù),直到鏈表的尾結(jié)點為止。void main( ) struct *head1; cout“input records:”endl; head1=creat( ); /*建立鏈表,建立鏈表, 并返回表頭并返回表頭*/ print(head1); /輸出鏈表輸出鏈表 例 函數(shù)調(diào)用兩個函數(shù)和,實現(xiàn)鏈表的和鏈表數(shù)據(jù)的。000189.5000276000388void print(struct *p) cout“These ”n“ records are:”endl; if(p=NULL) return;

22、 do coutnum“ ”scorenext; while(p!=NULL);000189.5000276000388(next)pp1p1void print(struct *p) cout“These ”n“ records are:”endl; if(p=NULL) return; do coutnum“ ”scorenext; while(p!=NULL); 對鏈表的刪除操作是把某個結(jié)點從鏈表中摘除,并不是真正從內(nèi)存中將這個結(jié)點刪除掉,使它脫離原來的鏈表,。 以指定的為刪除標志。從指針變量p指向的第一個結(jié)點開始,檢查該結(jié)點中的num是否為要刪除的學(xué)號,如果是則將其刪除;如果不是,則將

23、p移到下一個結(jié)點,再繼續(xù)判斷,直到刪除或到表尾為止。 對鏈表的刪除操作對鏈表的刪除操作000189.5000276000388設(shè)兩個指針和,先使p1指向第一個結(jié)點。如果p1所指的結(jié)點不是要刪除的結(jié)點,就將p2指向p1所指的結(jié)點(),然后將p1指向下一個結(jié)點()。再繼續(xù)判斷p1所指的結(jié)點是不是要刪除的結(jié)點,如此重復(fù),直到找到要刪除的結(jié)點并將其刪除或是檢查完全部鏈表為止。000189.5000276000388p1p2p1000189.5000276000388 要刪除的結(jié)點分兩種情況: 要刪除的是第一個結(jié)點(即),則執(zhí)行。這時,head指向了原來的第二個結(jié)點。此時,第一個結(jié)點雖然還存在,但它已與

24、鏈表脫離,因為鏈表中沒有一個結(jié)點或頭指針指向它,也就不能訪問它了,即已被刪除。p1000189.5000276000388 要刪除的結(jié)點分兩種情況:要 刪 除 的 不 是 第 一 個 結(jié) 點 , 則 應(yīng) 執(zhí) 行 ,即p2-next指向了p1-next所指向的結(jié)點, p1所指向的結(jié)點就被刪除而不再是鏈表的成員了。p1p2struct *dele( *head, long num) * *p1, p1, * *p2;p2; if (head=NULL) coutlist nullnum!=num&p1-next!=NULL) p2=p1; p1=p1-next; if (num=p1-num) if(p1=head) head=p1-next; else p2-next=p1-next; coutdelete:num; n=n-1; e l s e c o u t n u m n o t b e e n found!next=p

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論