freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c∕c程序設(shè)計教程(中)ppt-資料下載頁

2025-01-19 08:22本頁面
  

【正文】 ge。 }stu[3]={{10101,Li Lin,39。M39。,18}, {10102,Zhang Fun,39。M39。,19}, {10104,Wang Min,39。F39。,20}}。 main() { struct student *p。 for(p=stu。pstu+3。p++) printf(%d%s%c%d\n,pnum,pname,psex,page)。 } num name sex age stu[0] p stu[1] stu[2] p+1 – 用指向結(jié)構(gòu)體的指針作函數(shù)參數(shù) 用結(jié)構(gòu)體變量的成員作參數(shù) 值傳遞 用指向結(jié)構(gòu)體變量或數(shù)組的指針作參數(shù) 地址傳遞 用結(jié)構(gòu)體變量作參數(shù) 多值傳遞 ,效率低 struct data { int a, b, c。 }。 main() { void func(struct data)。 struct data arg。 =27。 =3。 =+。 printf(=%d =%d =%d\n,)。 printf(Call Func()....\n)。 func(arg)。 printf(=%d =%d =%d\n,)。 } void func(struct data parm) { printf(=%d =%d =%d\n,)。 printf(Process...\n)。 =18。 =5。 =*。 printf(=%d =%d =%d\n,)。 printf(Return...\n)。 } arg a :27 b: 3 c :30 (main) (func) parm a :27 b: 3 c :30 copy arg a :27 b: 3 c :30 (func) parm a :18 b: 5 c :90 a :27 b: 3 c :30 例 用結(jié)構(gòu)體變量作函數(shù)參數(shù) struct data { int a, b, c。 }。 main() { void func(struct data *parm)。 struct data arg。 =27。 =3。 =+。 printf(=%d =%d =%d\n,)。 printf(Call Func()....\n)。 func(amp。arg)。 printf(=%d =%d =%d\n,)。 } void func(struct data *parm) { printf(parma=%d parmb=%d parmc=%d\n,parma,parmb,parmc)。 printf(Process...\n)。 parma=18。 parmb=5。 parmc=parma*parmb。 printf(parma=%d parmb=%d parmc=%d\n,parma,parmb,parmc)。 printf(Return...\n)。 } arg a :18 b: 5 c :90 (main) ar a :27 b: 3 c :30 ain) 例 用結(jié)構(gòu)體指針變量作函數(shù)參數(shù) arg a :27 b: 3 c :30 ain) (func) parm **** ar a :18 b: 5 c :90 (main) (f c) par 動態(tài)數(shù)據(jù)結(jié)構(gòu) — 鏈表 鏈表的提出 定義形式:數(shù)組在內(nèi)存中占用連續(xù)存儲的空間。 鏈表是動態(tài)的進(jìn)行存儲分配,鏈表的各個結(jié)點在邏輯上是連續(xù)的,但是在內(nèi)存中存儲時不占用連續(xù)的空間。 鏈表的使用能有效的避免存儲空間的浪費和數(shù)據(jù)移動的問題。 ?鏈表的基本結(jié)構(gòu) 鏈表是一種常用的、能夠?qū)崿F(xiàn)動態(tài)存儲分配的數(shù)據(jù)結(jié)構(gòu)。 ( 1) 頭指針變量 head──指向鏈表的首結(jié)點 。 ( 2) 每個結(jié)點一般由 2個域組成: 1) 數(shù)據(jù)域 ──存儲結(jié)點本身的信息 。 2) 指針域 ──指向后繼結(jié)點的指針 。 ( 3) 尾結(jié)點的指針域置為 “ NULL(空 )”, 作為鏈表結(jié)束標(biāo)志 。 1356 A 1475 B NULL C 1249 head 1249 1356 1475 ?鏈表結(jié)點的定義 以上定義了一個結(jié)構(gòu)體 student類型, student類型數(shù)據(jù)包括 3個數(shù)據(jù)成員: int類型 num、 float類型的 score和指向另一個student類型數(shù)據(jù)的指針變量 next。 struct student { int num。 float score。 struct student *next。 }。 ?單向鏈表的訪問 ?輸出鏈表各個結(jié)點的數(shù)據(jù) void print(struct student *head) { struct student *p。 p=head。 while(p!=NULL) { printf(“%d,%\n”,pnum,pscore)。 p=pnext。 } } ?統(tǒng)計鏈表的長度 void len_link(struct student *head) { int n=0。 struct student *p。 p=head。 while(p!=NULL) { n++。 p=pnext。 } return(n)。 } ?動態(tài)存儲空間的建立和釋放 ?動態(tài)存儲空間的建立 ( 1) malloc函數(shù),其函數(shù)原型為: 函數(shù)原型為: void *malloc(unsigned int size)。 其作用是在內(nèi)存的動態(tài)存儲區(qū)中分配一個長度為 size的連 續(xù)空間。 ( 2) sizeof(type)運算符 計算所給數(shù)據(jù)類型 type的字節(jié)數(shù),主要用來計算鏈表中結(jié) 點所占動態(tài)存儲空間的字節(jié)數(shù)。 ?動態(tài)存儲空間的釋放 free函數(shù) ,其函數(shù)原型為: void free(void *p)。 其作用是釋放由 p指向的內(nèi)存區(qū),使這部分內(nèi)存區(qū)能被其他 變量使用。 p是調(diào)用 malloc函數(shù)時返回的值。 ?建立鏈表 ?輸出鏈表 ?查找結(jié)點 ?刪除 結(jié)點 ?插入 結(jié)點 ?鏈表的基本操作 ? 建立鏈表 ? 主要步驟:(結(jié)點為 struct student類型數(shù)據(jù)結(jié)構(gòu)) ( 1)先設(shè)三個指針變量: head、 p p2,它們都是用來指向struct student類型數(shù)據(jù)的。 struct student *head=NULL,*p1,*p2。 head:頭指針變量,指向鏈表第一個結(jié)點,作函數(shù)返回值。 p1:指向新申請的結(jié)點。 p2:指向鏈表的尾結(jié)點,用 p2next= p1,實現(xiàn)將新申請的 結(jié)點插入到鏈表尾,使之成為新的尾結(jié)點。 ( 2) malloc函數(shù)開辟第一個結(jié)點,并使 head和 p2都指向它。 head=p2=(struct student * )malloc(sizeof(struct student))。 scanf(%d%f,amp。p2num,amp。p2score)。 /*讀入數(shù)據(jù) */ (3) 再用 malloc函數(shù)開辟另一個結(jié)點并使 p1指向它,接著輸入該結(jié)點的數(shù)據(jù),并與上一結(jié)點相連,且使 p2指向新建立的結(jié)點。建立新結(jié)點: p1=(struct student*)malloc(sizeof(struct student))。 scanf(%d%f,amp。p1num,amp。p1score)。如圖 (a)所示: 與上一結(jié)點連接: p2next=p1。 如圖 (b)所示: 使 p2指向新鏈結(jié)點: p2=p1。 如圖 (c)所示: (a) (b) (c) 重復(fù)執(zhí)行第 ( 3) 步 , 可以建立第三個結(jié)點 , 并使第三個結(jié)點和第二個結(jié)點鏈接 ( p2next=p1。) , 依次創(chuàng)建后面的結(jié)點 , 直到所有的結(jié)點建立完畢 。 ( 4)給末結(jié)點的指針域賦值 NULL ( p2next=NULL。) 例 建立有 n個 student類型結(jié)點的鏈表, n的值從鍵盤輸入,再輸出鏈表。 define NULL 0 define LEN sizeof(struct student) include struct student /*定義結(jié)點 */ { int num。 float score。 struct student *next。 }。 void main() { int n。 struct student *head。 struct student create(int n)。 void print(struct student *head)。 printf(please input n\n)。 scanf(%d,amp。n)。 head=create(n)。 print(head)。 } /*create(int n)函數(shù) : 創(chuàng)建一個具有頭結(jié)點的單鏈表 */ /*形參 n值:創(chuàng)建鏈表的結(jié)點數(shù) */ /*返回值:返回單鏈表的頭指針 */ struct student *create(int n){ int i。 struct student *head=NULL, *p1, *p2。 head=p2=(struct student * ) malloc(LEN)。 /*申請新結(jié)點的空間 */ scanf(%d%f,amp。p2num,amp。p2score)。 /*讀入數(shù)據(jù) */ for(i=2。i=n。i++) { p1= ( struct student * )malloc(LEN)。 scanf(%d%f,amp。p1num,amp。p1score)。 p2next=p1。 /*與上一結(jié)點相鏈 */ p2=p1。 /*使 p2指向新鏈結(jié)點 */ } p2next=NULL。 return (head)。 } /* void print(struct student *head)為鏈表輸出函數(shù) */ /*形參 head為要輸出鏈表的頭指針 */ void print(struct student *head){ struct student *p。 p=head。 while(p!=NULL) { printf(%d,%\n,pnum,pscore)。 p=pnext。 /*移動指針 */ } } ?刪除結(jié)點 ?主要步驟: 假設(shè)在結(jié)點類型為 student的鏈表中刪除 num域為某個值的結(jié)點。 設(shè)三個指針變量: head、 p p2,它們都是用來指向 struct student類型數(shù)據(jù)的, head指向鏈表頭,若 head==NULL,則鏈表為空,沒有可刪除結(jié)點。 查找要刪除的結(jié)點,使 p1指向它, p2指向 p1的前一結(jié)點。 有兩種情況:刪除首結(jié)點和其它結(jié)點。 ( 2)刪除其它結(jié)點 刪除鏈表的中間結(jié)點通過將下一結(jié)點地址賦給前一結(jié)點地址來實現(xiàn),即將要刪除的 p1結(jié)點的后繼地址,放入前一結(jié)點 p2的地址域( p2next=p1next。),同時釋放 p1結(jié)點。 ( 1)刪除首結(jié)點 使 p1指向第一個結(jié)點,用以下語句實現(xiàn)刪除首結(jié)點操作。 p1=head。 head=p1next。 free(p1)。 head p1 num p2 p1 num /* delet(struct student *head,int num)函數(shù) : 刪除結(jié)點 */ /*形參值: head 頭結(jié)點, num 刪除結(jié)點值 */ /*返回值:返回單鏈表的頭指針 *
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1