版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第十一章自定義數(shù)據(jù)類型目錄/Contents結(jié)構(gòu)體數(shù)據(jù)類型,共用體數(shù)據(jù)類型、枚舉數(shù)據(jù)類型、定義數(shù)據(jù)類型的別名結(jié)構(gòu)體變量、結(jié)構(gòu)體數(shù)組、結(jié)構(gòu)體指針的定義和初始化結(jié)構(gòu)體成員的引用、成員選擇運(yùn)算符、指向運(yùn)算符向函數(shù)傳遞結(jié)構(gòu)體變量、結(jié)構(gòu)體數(shù)組、結(jié)構(gòu)體指針動態(tài)數(shù)據(jù)結(jié)構(gòu)、動態(tài)鏈表問題的提出在程序里怎樣表示一個人的信息(姓名、年齡、性別…)?想表示多個人呢?如何用計(jì)算機(jī)程序?qū)崿F(xiàn)下述表格的管理?結(jié)構(gòu)體類型的聲明structstudent{longid;charname[20];charsex;intage;floatscore[5];charaddr[30];};聲明了一個結(jié)構(gòu)體類型構(gòu)成結(jié)構(gòu)體的變量稱為結(jié)構(gòu)體的成員(StructureMember)結(jié)構(gòu)體的名字稱為結(jié)構(gòu)體標(biāo)簽(StructureTag)結(jié)構(gòu)體類型聲明structstudent{longid;charname[20];charsex;intage;floatscore[5];charaddr[30];};structstudent{longid;charname[20];charsex;intage;floatmath;floatenglish;floatcomputer;floatprogramming;floatdatabase;charaddr[30];};結(jié)構(gòu)體模板(StructureTemplate)不要遺忘分號!!形成一個類型聲明的樣板用于生成結(jié)構(gòu)體變量但并未聲明結(jié)構(gòu)體變量因而編譯器不為其分配內(nèi)存
結(jié)構(gòu)體變量定義(1)先定義結(jié)構(gòu)體類型,再定義變量名(2)在定義類型的同時(shí)定義變量(3)直接定義結(jié)構(gòu)體變量(即無名結(jié)構(gòu)體)structstudent{longid;charname[20];charsex;intage;floatscore[5];charaddr[30];}stu;struct{longid;charname[20];charsex;intage;floatscore[5];charaddr[30];}stu;typedef定義數(shù)據(jù)類型struct
student
stu1,stu2;/*Itworks*/student
stu1,stu2;/*Canthiswork?*/struct
stu1,stu2;/*Canthiswork?*/STUDENT
stu1,stu2;
/*Itworks!*/關(guān)鍵字typedef為一種已存在的類型定義一個別名,并未定義新類型STUDENT與structstudent類型是同義詞typedefstructstudent{longid;charname[20];charsex;intage;floatscore[5];charaddr[30];}STUDENT;結(jié)構(gòu)體變量初始化structstudentstu={1232019101,"張三豐",'M',20,{85,78,90,83,77},"北京"};STUDENTstu={1232019101,"張三豐",'M',20,{85,78,90,83,77},"北京"};等價(jià)于typedefstructstudent{longid;charname[20];charsex;intage;floatscore[5];charaddr[30];}STUDENT;stu.id=1232019101;strcpy(,”張三豐”);stu.sex=‘M’;stu.age=20;stu.score[]={85,78,90,83,77};Stu.addr=“北京”;等價(jià)于注意?。?!結(jié)構(gòu)體嵌套嵌套的結(jié)構(gòu)體(NestedStructure)就是在一個結(jié)構(gòu)體內(nèi)包含了另一個結(jié)構(gòu)體作為其成員typedefstructstudent{longid;charname[20];charsex;intage;floatscore[5];DATEbirthday;charaddr[30];}STUDENT;typedefstructdate{ intmonth; intday; intyear;}DATE;結(jié)構(gòu)體嵌套結(jié)構(gòu)體變量的引用訪問結(jié)構(gòu)體變量的成員必須使用成員選擇運(yùn)算符(也稱圓點(diǎn)運(yùn)算符)當(dāng)出現(xiàn)結(jié)構(gòu)體嵌套時(shí),必須以級聯(lián)方式訪問結(jié)構(gòu)體成員typedefstructstudent{longid;charname[20];charsex;intage;floatscore[5];DATEbirthday;charaddr[30];}STUDENT;typedefstructdate{ intmonth; intday; intyear;}DATE;結(jié)構(gòu)體.成員名stu.id=1232019101;stu.birthday.year=2000;stu.birthday.month=5;stu.birthday.day=12;結(jié)構(gòu)體變量的引用【例11.1】
編寫程序,從鍵盤輸入兩個學(xué)生的學(xué)號、姓名、性別、年齡、出生日期、出生地和某門課成績,輸出成績較高的學(xué)生的所有信息。#include<stdio.h>typedefstructdate{ intmonth; intday; intyear;}DATE;typedefstructstudent{ longid; charname[20]; charsex; intage; DATEbirthday; charaddr[30]; floatscore;}STUDENT;結(jié)構(gòu)體變量的引用intmain(){STUDENTstu1,stu2;printf("Entertherecordofthefirststudent:\n");scanf("%ld%s%c%d%d%d%d%s%f",&stu1.id,,&stu1.sex,&stu1.age,&stu1.birthday.month,&stu1.birthday.day,&stu1.birthday.year,stu1.addr,&stu1.score);printf("Entertherecordofthesecondstudent:\n");scanf("%ld%s%c%d%d%d%d%s%f",&stu2.id,,&stu2.sex,&stu2.age,&stu2.birthday.month,&stu2.birthday.day,&stu2.birthday.year,stu2.addr,&stu2.score);printf("Thehigherscorestudentis:\n");if(stu1.score>stu2.score){ printf("%10ld%8s%3c%4d%04d/%02d/%4d%6s%4.1f",stu1.id,,stu1.sex,stu1.age,stu1.birthday.month,stu1.birthday.day,stu1.birthday.year,stu1.addr,stu1.score);}
格式符%02d中2d前面的前導(dǎo)符0表示輸出數(shù)據(jù)時(shí),若左邊有多余位,則補(bǔ)0結(jié)構(gòu)體變量的引用elseif(stu1.score<stu2.score) {printf("%10ld%8s%3c%4d%04d/%02d/%4d%6s%4.1f",stu2.id,,stu2.sex,stu2.age,stu2.birthday.month,stu2.birthday.day,stu2.birthday.year,stu2.addr,stu2.score);}else{printf("%10ld%8s%3c%4d%04d/%02d/%4d%6s%4.1f",stu1.id,,stu1.sex,stu1.age,stu1.birthday.month,stu1.birthday.day,stu1.birthday.year,stu1.addr,stu1.score);printf("%10ld%8s%3c%4d%04d/%02d/%4d%6s%4.1f",stu2.id,,stu2.sex,stu2.age,stu2.birthday.month,stu2.birthday.day,stu2.birthday.year,stu2.addr,stu2.score);}return0;}結(jié)構(gòu)體所占內(nèi)存大小struct類型用內(nèi)存字節(jié)數(shù)=?是所有成員變量的內(nèi)存總和嗎?printf("%d\n",sizeof(struct
sample));用運(yùn)算符sizeof獲得結(jié)構(gòu)體大小sizeof(變量或表達(dá)式)sizeof(類型)12Why?printf("%d\n",sizeof(SAMPLE));事實(shí)上,所有數(shù)據(jù)類型在內(nèi)存中都是從偶數(shù)地址開始存放的且結(jié)構(gòu)所占的實(shí)際空間一般是按照機(jī)器字長對齊的不同的編譯器、平臺,對齊方式會有變化結(jié)構(gòu)體變量的成員的存儲對齊規(guī)則是與機(jī)器相關(guān)的具有特定數(shù)據(jù)類型的數(shù)據(jù)項(xiàng)大小也是與機(jī)器相關(guān)的所以一個結(jié)構(gòu)體在內(nèi)存中的存儲格式也是與機(jī)器相關(guān)的非所有成員變量的內(nèi)存總和12個字節(jié)m1m2m3m1m3m2結(jié)構(gòu)體所占內(nèi)存大小結(jié)構(gòu)體數(shù)組的定義和初始化typedefstructstudent{longid;charname[20];charsex;intage;floatscore[5];DATEbirthday;charaddr[30];}STUDENT;typedefstructdate{ intmonth; intday; intyear;}DATE;結(jié)構(gòu)體數(shù)組的定義和初始化STUDENTstu[5]={{1232019101,"張三豐",'M',20,{5,12,1999},"北京",{88,86,90,75}},{1232019102,"張
磊",'M',20,{4,2,1999},"上海",{80,86,93,79}},{1232019103,"王大年",'M',20,{1,16,1999},"南京",{78,66,90,77}},{1232019104,"趙
剛",'M',21,{11,24,1998},"大連",{85,80,98,95}},{1232019105,"李云龍",'M',20,{8,10,1999},"深圳",{78,86,80,75}},};for(i=0;i<5;i++){scanf("%ld%s%c%d%d%d%d%s",&stu[i].id,stu[i].name,&stu[i].sex,&stu[i].age,&stu[i].birthday.month,&stu[i].birthday.day,&stu[i].birthday.year,stu[i].addr);for(j=0;j<4;j++){ scanf("%f",&stu[i].score[j]);}}結(jié)構(gòu)體數(shù)組的定義和初始化結(jié)構(gòu)體數(shù)組的定義和初始化#include<stdio.h>#defineM5#defineN4typedefstructdate{ intmonth; intday; intyear;}DATE;typedefstructstudent{ longid; charname[20]; charsex; intage; DATEbirthday; charaddr[30]; floatscore[4];}STUDENT;【例11.3】
編寫程序,使用結(jié)構(gòu)體數(shù)組從鍵盤輸入5個學(xué)生4門課的成績,計(jì)算并輸出每個學(xué)生4門課的平均分。結(jié)構(gòu)體數(shù)組的定義和初始化intmain(){STUDENTstu[M]; /*定義結(jié)構(gòu)體數(shù)組*/inti,j;floatsum[M];for(i=0;i<M;i++){ /*輸入M個學(xué)生的信息*/printf("EntertherecordofNo.%dstudent:\n",i+1);scanf("%ld%s%c%d%d%d%d%s",&stu[i].id,stu[i].name,&stu[i].sex,&stu[i].age, &stu[i].birthday.month,&stu[i].birthday.day,&stu[i].birthday.year,stu[i].addr);for(j=0;j<N;j++){scanf("%f",&stu[i].score[j]);}}for(i=0;i<M;i++){sum[i]=0.0;for(j=0;j<N;j++){ sum[i]=sum[i]+stu[i].score[j];}printf("%10ld%6s%3c%4d%02d/%02d/%4d%6s%6.1f%6.1f%6.1f%6.1f%6.1f\n",stu[i].id,stu[i].name,stu[i].sex,stu[i].age,stu[i].birthday.month,stu[i].birthday.day,stu[i].birthday.year,stu[i].addr,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],sum[i]/4);/*顯示結(jié)構(gòu)體成員信息*/}return0;}結(jié)構(gòu)體指針的定義和初始化ptstu1
STUDENT
stu1;
STUDENT
*pt;pt=&stu1;成員1成員2成員3成員4成員5如何定義指向結(jié)構(gòu)體變量的指針?STUDENT
*pt=&stu1;等價(jià)于typedefstructstudent{longid;charname[20];charsex;intage;floatscore[5];DATEbirthday;charaddr[30];}STUDENT;typedefstructdate{ intmonth; intday; intyear;}DATE;結(jié)構(gòu)體指針的定義和初始化ptstu1
STUDENT
stu1;
STUDENT
*pt;pt=&stu1;成員1成員2成員3成員4成員5如何訪問結(jié)構(gòu)體指針變量所指向的結(jié)構(gòu)體成員呢?typedefstructstudent{longid;charname[20];charsex;intage;floatscore[5];DATEbirthday;charaddr[30];}STUDENT;typedefstructdate{ intmonth; intday; intyear;}DATE;通過stu1和成員選擇運(yùn)算符訪問結(jié)構(gòu)體成員stu1.id=1;通過pt和指向運(yùn)算符訪問結(jié)構(gòu)體成員(*pt).id=1;
pt->id=1;結(jié)構(gòu)體指針的定義和初始化
STUDENT
stu;
STUDENT
*pt;pt=&stu;成員1成員2成員3成員4成員5typedefstructstudent{longid;charname[20];charsex;intage;floatscore[5];DATEbirthday;charaddr[30];}STUDENT;typedefstructdate{ intmonth; intday; intyear;}DATE;當(dāng)結(jié)構(gòu)體嵌套時(shí),結(jié)構(gòu)體指針變量應(yīng)逐級訪問其所指向的結(jié)構(gòu)體成員,直到最后一級成員。
stu.birthday.day=21;
(*pt).birthday.day=21;pt->birthday.day=21;ptstu
STUDENT
stu[20];
STUDENT
*pt;pt=stu;
相當(dāng)于如何定義指向結(jié)構(gòu)體數(shù)組的指針?STUDENT
*pt=stu;STUDENT
*pt=&stu[0];stu[0]stu[1]stu[2]stu[3]ptstu[20]typedefstructstudent{longid;charname[20];charsex;intage;floatscore[5];DATEbirthday;charaddr[30];}STUDENT;typedefstructdate{ intmonth; intday; intyear;}DATE;stu[4]stu[5]……stu[19]或結(jié)構(gòu)體指針的定義和初始化結(jié)構(gòu)體做函數(shù)參數(shù)①結(jié)構(gòu)體成員作為函數(shù)參數(shù)。復(fù)制單個成員的內(nèi)容,函數(shù)內(nèi)部對結(jié)構(gòu)體內(nèi)容的修改不影響其結(jié)構(gòu)。②結(jié)構(gòu)體變量作為函數(shù)參數(shù)。③結(jié)構(gòu)體數(shù)組或結(jié)構(gòu)體指針作為函數(shù)參數(shù)。結(jié)構(gòu)體變量作函數(shù)參數(shù)typedefstructemployee{ intemID; char*name; charsex; intage;}EMPLOYEE;voidFun(EMPLOYEEem){ em.emID=1001; ="張大彪"; em.sex='M'; em.age=25;}#include<stdio.h>voidFun(EMPLOYEEem);intmain(){ EMPLOYEEemp; emp.emID=1003; ="王妙可"; emp.sex='F'; emp.age=18; printf("Beforefunctioncall:%d%8s%3c%4d\n",emp.emID,,emp.sex,emp.age); Fun(emp); printf("Afterfunctioncall:%d%8s%3c%4d\n",emp.emID,,emp.sex,emp.age); return0;}【例11.4結(jié)構(gòu)體變量作為函數(shù)參數(shù)】結(jié)構(gòu)體指針作函數(shù)參數(shù)typedefstructemployee{ intemID; char*name; charsex; intage;}EMPLOYEE;voidFun(EMPLOYEE*em){ em->emID=1001; em->name="張大彪"; em->sex='M'; em->age=25;}#include<stdio.h>voidFun(EMPLOYEE*em);intmain(){ EMPLOYEEemp; emp.emID=1003; ="王妙可"; emp.sex='F'; emp.age=18; printf("Beforefunctioncall:%d%8s%3c%4d\n",emp.emID,,emp.sex,emp.age); Fun(&emp); printf("Afterfunctioncall:%d%8s%3c%4d\n",emp.emID,,emp.sex,emp.age); return0;}【例11.5結(jié)構(gòu)體指針作為函數(shù)參數(shù)】結(jié)構(gòu)體變量作為函數(shù)的返回值typedefstructemployee{ intemID; char*name; charsex; intage;}EMPLOYEE;EMPLOYEEFun(EMPLOYEEem){ em.emID=1001; ="張大彪"; em.sex='M'; em.age=25; returnem;}#include<stdio.h>EMPLOYEEFun(EMPLOYEEem);intmain(){ EMPLOYEEemp; emp.emID=1003; ="王妙可"; emp.sex='F'; emp.age=18; printf("Beforefunctioncall:%d%8s%3c%4d\n",emp.emID,,emp.sex,emp.age); emp=Fun(emp); printf("Afterfunctioncall:%d%8s%3c%4d\n",emp.emID,,emp.sex,emp.age); return0;}【例11.6結(jié)構(gòu)體變量作函數(shù)返回值】結(jié)構(gòu)體作函數(shù)參數(shù)向函數(shù)傳遞結(jié)構(gòu)體的完整結(jié)構(gòu)復(fù)制整個結(jié)構(gòu)體成員的內(nèi)容,多個值函數(shù)內(nèi)對結(jié)構(gòu)內(nèi)容的修改不影響原結(jié)構(gòu)內(nèi)容傳遞更直觀,但開銷大向函數(shù)傳遞結(jié)構(gòu)體的首地址用結(jié)構(gòu)體數(shù)組/結(jié)構(gòu)體指針作函數(shù)參數(shù)僅復(fù)制結(jié)構(gòu)體的首地址,一個值修改結(jié)構(gòu)體指針?biāo)赶虻慕Y(jié)構(gòu)體的內(nèi)容指針傳遞效率高【例11.7】
編寫程序,使用結(jié)構(gòu)體數(shù)組作為函數(shù)參數(shù),從鍵盤輸入5個學(xué)生4門課的成績,計(jì)算并輸出每個學(xué)生4門課的平均分。typedefstructdate{ intmonth; intday; intyear;}DATE;typedefstructstudent{ longid; charname[20]; charsex; intage; DATEbirthday; charaddr[30]; floatscore[4];}STUDENT;#include<stdio.h>#defineM5#defineN4voidInputScore(STUDENTstu[],intm,intn);voidGetAverage(STUDENTstu[],floatav[],intm,intn);voidPrintScore(STUDENTstu[],floatav[],intm,intn);intmain(){ STUDENTstu[M]; intm,n; floataver[M]; printf("Enterthenumberofstudents:"); scanf("%d",&m); printf("Enterthenumberofsubjects:"); scanf("%d",&n); InputScore(stu,m,n); GetAverage(stu,aver,m,n); PrintScore(stu,aver,m,n); return0;}結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù)voidInputScore(STUDENTstu[],intm,intn){ inti,j; for(i=0;i<M;i++) { printf("EntertherecordofNo.%dstudent:\n",i+1); scanf("%ld%s%c%d%d%d%d%s",&stu[i].id,stu[i].name,&stu[i].sex,&stu[i].age, &stu[i].birthday.month,&stu[i].birthday.day,&stu[i].birthday.year,stu[i].addr); for(j=0;j<N;j++) { scanf("%f",&stu[i].score[j]); } } }voidGetAverage(STUDENTstu[],floatav[],intm,intn){ inti,j,sum[M]; for(i=0;i<M;i++) { sum[i]=0.0; for(j=0;j<N;j++) { sum[i]=sum[i]+stu[i].score[j]; } av[i]=sum[i]/4; }}結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù)voidPrintScore(STUDENTstu[],floatav[],intm,intn){ inti,j; printf("Finalresults:\n"); for(i=0;i<m;i++) { printf("%10ld%6s%3c%4d%02d/%02d/%4d%6s%6.1f%6.1f%6.1f%6.1f%6.1f\n", stu[i].id,stu[i].name,stu[i].sex,stu[i].age,stu[i].birthday.month,stu[i].birthday.day, stu[i].birthday.year,stu[i].addr,stu[i].score[0],stu[i].score[1],stu[i].score[2], stu[i].score[3],av[i]); }}共用體結(jié)構(gòu)體(Struct)把關(guān)系緊密且邏輯相關(guān)的多種不同類型的變量,組織到統(tǒng)一的名字之下占用相鄰的一段內(nèi)存單元共用體,也稱聯(lián)合(Union)把情形互斥但邏輯相關(guān)的多種不同類型的變量,組織到統(tǒng)一的名字之下占用同一段內(nèi)存單元,每一時(shí)刻只有一個數(shù)據(jù)起作用共用體sizeof(uniondata)取決于占空間最多的那個成員變量同一內(nèi)存單元在每一瞬時(shí)只能存放其中一種類型的成員起作用的成員是最后一次存放的成員,不能作為函數(shù)參數(shù)不能進(jìn)行比較操作,只能對第一個成員初始化共用體【例11.8】
有一批教師和學(xué)生的數(shù)據(jù),教師的數(shù)據(jù)包括:姓名、編號、性別、職業(yè)、職務(wù)。學(xué)生的數(shù)據(jù)包括:姓名、編號、性別、職業(yè)、班級。編寫程序,使用同一個表格來處理這批數(shù)據(jù)。#include<stdio.h>#defineN10typedefunioncategory{ intclas; charposition[10];}CATEGORY;typedefstructpersonel{ intnum; charname[20]; charsex; charjob; CATEGORYca;}PERSONEL;intmain(){PERSONELperson[N];inti,n;printf("Inputthenumberofpersons:");scanf("%d",&n);for(i=0;i<n;i++){printf("PleaseinputNo.%dperson'sdata:\n",i+1);scanf("%d%s%c%c",&person[i].num,person[i].name,&person[i].sex,&person[i].job);if(person[i].job=='s') scanf("%d",&person[i].ca.clas);elseif(person[i].job=='t') scanf("%s",&person[i].ca.position);else printf("Inputdataerror!");}printf("\n");printf("No.\tname\tsex\tjob\tclass/position\n");for(i=0;i<n;i++){if(person[i].job=='s')printf("%-6d%-10s%-4c%-4c%-10d\n",person[i].num,person[i].name,person[i].sex,person[i].job,person[i].ca.clas);else printf("%-6d%-10s%-4c%-4c%-10s\n",person[i].num,person[i].name,person[i].sex,person[i].job,person[i].ca.position);}return0; }枚舉類型枚舉(Enumeration)數(shù)據(jù)類型描述的是一組整型值的集合用于當(dāng)某些量僅由有限個數(shù)據(jù)值組成時(shí)
enumweeks{SUN,MON,TUE,WED,THU,FRI,SAT};
enumweekstoday;enumresponse{no,yes,none};enumresponseanswer;
today=TUE;
answer=yes;
enumresponse{no=-1,yes=1,none=0};枚舉類型【例11.10】
球袋里裝有紅、黃、藍(lán)、白、黑5種顏色的乒乓球若干,每次從球袋里先后取出3個球,計(jì)算得到3個不同顏色的球的可能取法,并顯示每種排列的情況。枚舉類型問題的提出數(shù)組可能存在越界、浪費(fèi)內(nèi)存現(xiàn)象數(shù)組插入和刪除操作時(shí),需要移動大量的數(shù)組元素是否存在一種合理使用內(nèi)存的方法呢?這些動態(tài)數(shù)據(jù)結(jié)構(gòu)使用結(jié)構(gòu)體和指針來實(shí)現(xiàn)。例如:structnode{ intdata; structnode*next;};動態(tài)數(shù)據(jù)結(jié)構(gòu)---單向鏈表鏈表:線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)特點(diǎn):用一組任意的存儲單元存儲線性表的數(shù)據(jù);存儲單元可以是連續(xù)的,也可是不連續(xù)的為表示每個元素與后繼元素的邏輯關(guān)系,除存儲元素本身信息外,還要存儲其直接后繼信息datanextheaddatanextdatanextdataNULL數(shù)據(jù)域:存儲數(shù)據(jù)元素信息指針域:存儲直接后繼的節(jié)點(diǎn)信息structLink{
int data;
structLink*next;};n個節(jié)點(diǎn)鏈接成一個鏈表(因?yàn)橹话粋€指針域,故又稱線性鏈表或單向鏈表)鏈表的建立向鏈表中添加一個新節(jié)點(diǎn)data=Anodedata=Bnodedata=C∧nodehead空指針NULL表示鏈表結(jié)尾鏈表的頭指針:訪問鏈表的關(guān)鍵structnode{ intdata; structnode*next;};鏈表的建立若原鏈表為空表(head==NULL),則將新建節(jié)點(diǎn)p置為頭節(jié)點(diǎn),讓head指向新節(jié)點(diǎn)。
head=NULL;p->next=head;head=p;鏈表建立原鏈表不是空鏈表,則按節(jié)點(diǎn)值的大?。俣ü?jié)點(diǎn)值已按升序排序)確定插入新節(jié)點(diǎn)的位置。如果在頭節(jié)點(diǎn)前插入新節(jié)點(diǎn),則將新節(jié)點(diǎn)的指針域指向原鏈表的頭節(jié)點(diǎn),且讓head指向新節(jié)點(diǎn)。
p=malloc(sizeof(structnode));p->data=2;p->next=head;head=p;鏈表建立在鏈表中間插入新節(jié)點(diǎn),則用語句p->next=prev->next;將新節(jié)點(diǎn)的指針域指向下一個節(jié)點(diǎn),然后用語句prev->next=p;讓前一個節(jié)點(diǎn)的指針域指向新節(jié)點(diǎn)鏈表建立在表尾插入新節(jié)點(diǎn),則直接用語句prev->next=p;將尾節(jié)點(diǎn)的指針域指向新節(jié)點(diǎn)即可。鏈表建立-鏈表插入函數(shù)structnode*InsertNode(structnode*list,intn){ structnode*p; p=malloc(sizeof(structnode)); if(p=NULL) { printf("Error:mallocfailedinInsertNode\n"); exit(EXIT_FAILURE); } p->data=n; p->next=list; returnp;}鏈表建立-從鍵盤向鏈表輸入數(shù)據(jù)structnode*ReadNumbers(void){ structnode*head; printf("Inputaseriesofintegers(0toterminate):"); for(;;) { scanf("%d",&n); if(n==0) { returnhead; } InsertNode(head,n); }}鏈表的搜索structnode*SearchNode(structnode*list,intn){ structnode*p; for(p=list;p!=NULL;p=p->next) if(p->data==n) returnp; returnNULL;}structnode*SearchNode(structnode*list,intn){ for(;list!=NULL;list=list->next) if(list->data==n) returnlist; returnNULL;}structnode*SearchNode(structnode*list,intn){for(;list!=NULL&&list->data!=n;list=list->next);returnlist;}structnode*SearchNode(structnode*list,intn){while(;list!=NULL&&list->data!=n;
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 博文小學(xué)第7單元數(shù)學(xué)試卷
- 2024版商鋪居間服務(wù)費(fèi)合同
- 2024深海探測與資源開發(fā)合作合同
- 2021年高考化學(xué)試卷(福建)(空白卷)
- 二零二五年度上市公司股權(quán)回購執(zhí)行書3篇
- 2024版上海房屋裝修合同范本
- 2025版有備無患智慧城市建設(shè)合作協(xié)議3篇
- 腳趾長水泡的健康宣教
- 2025裝潢工程廣建國際設(shè)計(jì)工程公司合同書
- 保定市7年級數(shù)學(xué)試卷
- 醫(yī)學(xué)針灸推拿學(xué)考研模擬習(xí)題及參考答案
- 2024年包頭職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫及答案1套
- 教科版小學(xué)科學(xué)四年級上冊期末檢測試卷及答案(共三套)
- 人教部編版八年級數(shù)學(xué)上冊期末考試卷及答案一
- 養(yǎng)老機(jī)構(gòu)安全管理培訓(xùn)課件
- (附答案)2024公需課《百縣千鎮(zhèn)萬村高質(zhì)量發(fā)展工程與城鄉(xiāng)區(qū)域協(xié)調(diào)發(fā)展》試題廣東公需科
- 安徽省蕪湖市2023-2024學(xué)年高一上學(xué)期1月期末英語試題
- 有門攝影課智慧樹知到期末考試答案2024年
- 臨床試驗(yàn)觀察表(CRF)
- (正式版)JBT 11880.13-2024 柴油機(jī) 選擇性催化還原(SCR)系統(tǒng) 第13部分:催化劑分子篩
- 2024年江蘇宿遷永澤福壽園殯葬服務(wù)有限公司招聘筆試參考題庫含答案解析
評論
0/150
提交評論