版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
chapter10STRUCTURESANDUNIONSAstructureisacollectionofoneormorevariables,possiblyofdifferenttypes,whicharetreatedasaunitinsteadofasseparateentities.10.1structuredefinition
10.2
structurevariablescitingandinitialization10.3structurearray10.4structurepointer10.5
linkdispoing---applicationofstructurepointer10.6unionandenumeration10.7typedef10.1STRUCTURETYPEANDDECLARATIONOFSTRUCTUREVARIABLESTHESTRUCTURETYPE,INCLANGUAGE
,isthecounterpartas“record”inotheradvancedlanguage.一、questionemergingSTUDENTSCORESMANAGETABLE
CANOTDEALWITH2DARRAYSDIFFERENTTYEPES!1001ZhangXinM2087911002WangLiF2098961003ChenFongM2186901004LiXiaopenM207786
numnamesexagescore1score2二、structuretypedeclarationCommonusage:structstructuretypename
{
datatypemember1;
datatypemember2;
…………
datatype
membern;
};
structstudent{intnum;charname[20];charsex;
intage;floatscore1;floatscore2;};Typename
numnamesexagescore1score2structstudentdemonstration:1、therulestoname“structuretypename”and“membername”,aresamewiththevariables’.2、thedefinitionsofvariablescanbeseperatedorinasamelineliketheinstancebelow
eg.
structdate{intyear,month,day;};3、thedefinitionsofvariablescouldbebasictypesoranotherstructuretypewhichhasbeendeclarated.
eg.the
type”birthday”intheeg.Ofstructuretypestd_infoisadefinitedstructuretype--date三、
STRUCTUREVARIABLESDECLARATIONStructuretype(userdefinition)Standarttype(systemdefinition)1、indirectdeclaration
──firstdeclarethestructuretype,thenthestructurevariablesThesameusagestruct
student{intnum;charname[20];charsex;
intage;floatscore1;floatscore2;};structstudentstu1,stu2;
numnamesexagescore1score2stu12、directdeclaration(1)definitethestructurevariable,when
definitingthestructuretype;
(2)definitethestructurevariabledirectly;(1)struct
student{intnum;charname[20];……floatscore2;}stu1,stu2;(2)struct{intnum;charname[20];……floatscore2;}stu1,stu2;3、demonstration(1)differstructuretypeandvariable,whicharecompletelydifferentconception,justastypeintandvariableofint(2)membernamesinstructure,maybesameasothervariablesinprogram,standfordifferentobjects
[eg10.1]creatastructurerefferingtobasicinformationofastudenttostorethedetailsofastudentstructdate /*datastructuretypemadeofyear,monthandday*/{intyear;
intmonth;
intday;};structstd_info /*studentinformationstructuretype*/{intnum;/*madeofname,sex,birthday,etc*/charname[12];charsex;
structdatebirthday;floatscore1,score2;};numnamesexscore1score2
birthdayyearmonthday10.2CITINGAND
INITIALIZATIONSOF
STUCTUREVARIABLES
[例10.2]makeuseoftheformerstucturetypestructstd_info,todefiniteastructuretypestutostoreandprintthestudentdetails#include“struct.h”
structstd_infostu
={1002,”ZhangSan”,‘M’,{1980,9,20},98.2,86.5};
main()
{printf("No:%d\n",stu.num);
printf("Name:%s\n",);
printf("Sex:%c\n",stu.sex);
printf("Birthday:%d-%d-%d\n",stu.birthday.year,
stu.birthday.month,stu.birthday.day);}
numnamesexscore1score2
birthdayyearmonthdayresult:No:1002Name:ZhangSanSex:MBirthday:1980-9-20
1、INITIALIZATIONSOF
STUCTUREvariable
structtype
struct_variable={initialvalue
list}eg,structstd_infostu
={“000102”,”ZhangSan”,‘M’,{1980,9,20}};
note:datatypeofinitialvalueshouldbeconsistentwiththemembersinstructurevariable,ortherewillbeerror.2、citingrulesofstructurevariablememberoperator“.”whilecitingthememberinstructure,useoperator”.”;citingformat:structure
variable.member
eg,stu.num;
,etc。NOTE:ifamemberitselfisastructuretype,amultilevelmemberoperationisneededtocitethelowestmember.Expandingformat:
structurevariable.member.child-member.….LowestmemberEg.:
stu.birthday.year
stu.birthday.month
stu.birthday.daybetakingthelowestmemberisequaltocommonvariableofthesametype.10.3STRUCTUREARRAYSStructurearrays:anarraymadebystructuretypedatawhichisaselementinstructure.Everyarrayelement:includeallmembersofstructure[例10.3]usestructurearraytostoreandprintthestudentscoresmanagetablebelow.stu[0]stu[1]stu[2]stu[3]1001ZhangXinM2087911002WangLiF2098961003ChenFongM2186901004LiXiaopenM207786
numnamesexagescore1score2struct
student/*laythedefinitionofstructuretypeoutsidefunction*/{intnum;charname[12];charsex;
intage;floatscore1;floatscore2;};struct
stdentstu[4]={{1001,”ZhangXin”,’M’,20,87,91},
{1002,”WangLi”,‘F’,20,98,96},{1003,”ChenFong”,’M’,21,86,90},{1004,”LiXiaopen”,‘M’,20,77,86}};Storeinfile“struct.h”#include"struct.h”main(){inti;/*printlisthead,"□“standsforonebackspace*/printf("No.□□Name□□□□□□□□Sex□Age□soc1□sco2\n");/*outputbasicdetailsof4students*/for(i=0;i<4;i++){printf("%-5d",stu[i].num);printf("%-12s",stu[i].name);printf("%-4c",stu[i].sex);printf("%-4d",stu[i].age);printf("%-5.1f",stu[i].score1);printf("%-5.1f\n",stu[i].score2);}}Runningresult:
No.NameSexAgesoc1sco21001ZhangXinM208791
1002WangLiF2098961003ChenFongM2186901004LiXiaopenM207786[eg10.4]usearraysofstructureasfuntionparameters#include"struct.h"voidprint_stulist(structstudentstu[]){inti;
printf("No.NameSexAgesoc1sco2\n");for(i=0;i<4;i++){printf("%-5d",stu[i].num);printf("%-12s",stu[i].name);printf("%-4c",stu[i].sex);printf("%-4d",stu[i].age);printf("%-5.1f",stu[i].score1);printf("%-5.1f\n",stu[i].score2);}}UseArrayofstructureasformalparametervoidsort(structstudentst[]){inti,j;
structstudenttemp;for(i=0;i<4-1;i++)for(j=i+1;j<4;j++) if(st[i].score1<st[j].score1) {temp=st[i];
st[i]=st[j];
st[j]=temp; }}
main(){clrscr();
print_stulist(stu);
sort(stu);
printf("listaftersorted:\n");print_stulist1(stu);
getch();}Structurearrayasformalparameter
Runningresult:
No.NameSexAgesoc1sco21001ZhangXinM2087911002WangLiF2098961003ChenFongM2186901004LiXiaopenM207786listaftersorted:No.NameSexAgesoc1sco21002WangLiF2098961001ZhangXinM208791
1003ChenFongM2186901004LiXiaopenM20778610.4pointerpointedtodatatypeofstructurePointerofstructurevariable:structurevariableexistsinthestartingpositionofthestorage.voidprint_stulist(structstudentstu[]){inti;
printf("No.NameSexAgesoc1sco2\n");for(i=0;i<4;i++){printf("%-5d",stu[i].num);printf("%-12s",stu[i].name);printf("%-4c",stu[i].sex);printf("%-4d",stu[i].age);printf("%-5.1f",stu[i].score1);printf("%-5.1f\n",stu[i].score2);}}modify!Usepointerwhichpointtostructureasformalparameter
[eg10.5]usepointertocallmemberofthestructurevariablevoidprint_stulist1(structstudent*p){inti;
printf("No.NameSexAgesoc1sco2\n");for(i=0;i<4;i++){printf("%-5d",(*(p+i)).num);printf("%-12s",(*(p+i)).name);printf("%-4c",(*(p+i)).sex);printf("%-4d",(*(p+i)).age);printf("%-5.1f",(*(p+i)).score1);printf("%-5.1f\n",(*(p+i)).score2);}Ifusefor(i=0;i<4;i++,p++),thenhowtomodify?
[eg10.5]usepointertocalleverymemberofthestructurevariable
voidprint_stulist1(structstudent*p){inti;
printf("No.NameSexAgesoc1sco2\n");for(i=0;i<4;i++,p++){printf("%-5d",(*p).num);printf("%-12s",(*p).name);printf("%-4c",(*p).sex);printf("%-4d",(*p).age);printf("%-5.1f",(*p).score1);printf("%-5.1f\n",(*p).score2);}Ifthepointerhasbeenpointingtostructurevariablev,thenwhen:
structstudentvar,*p=&v;The3formsbelowareequal:
(1)var.membername(2)(*p).membername(3)p->membernamethoughts:howtoinputeverymemberofstu[i]bykeyboard?10.5linklist
disposing──applicationofstructurepointer10.5.1linklistoverview
一.Dynamicdatastructure
elementnumberfluctuatesbyprogramrunning.cf.datastructureofstaticstate(eg.array),confirmingitssizewhendefiniting.二.Dynamicdatastructureimplement
invirtueof
:
1、pointerpointstostructuretype2、structuretypeincludingpointerdata
linklist:asimpledynamicdatastructure.head
3125NULL10.5.2creatinglinklist
一、descriptionoflinklistnodestructureeg.
structnode{intnum; /*dataarea*/
structnode
*next; /*pointerarea*/};二、
functionofdisposinglinklist1、malloc——applymemorystoragevoid*malloc(unsigned
intsize)
eg.
structnode*p;p=(structnode*)malloc(sizeof(structnode));
numnextp2、free——setstorageareafreevoidfree(void*p)
三、createlinklist[例10.6]accordingtoaseriesofnonnegative
integers,inputbykeyboard,tocreatealinklist,andoutputthevalueofeverydataareabyordereg:input13250,createlinklistsuchas:3125NULLhead
1
325NULLhead/*1.creatnewnode,pointedbyheadpointer*/head=(structnode*)malloc(LEN);last=head;/*tailpointerpointstonodeoftail*/head
last/*2.inputx;createnewnodep;storextonumareaofnodep*/scanf("%d",&x);p=(structnode*)malloc(LEN);p->num=x;/*3.addptothelinklisttail*/last->next=p;
1headlastp
1headplast/*4.lastmovebackwards*/last=p;1headlastpRepeat2~4,whenx≤0
132head5NULLlast/*setpointerareaNULLwhichwaspointedbytailnodepointer,headpointermovebackwards(deletingheadnode)*/last->next=NULL;head=head->next;main(){structnode*head,*p,*last;
intx;head=(structnode*)malloc(LEN);last=head;
while(1){scanf("%d",&x);if(x<=0)break;p=(structnode*)malloc(LEN); p->num=x; last->next=p; last=p;}last->next=NULL;head=head->next;
#defineNULL0#defineLEN
sizeof(structnode)structnode{intnum;
structnode*next;};p=head;head=head->next;free(p);
132head5NULL/*outputlinklist*/printf(“dataofthelinklistare:”)p=head;while(p!=NULL){printf("%5d",p->num); p=p->next;}
printf("\n");
getch();}Runningresult:13250dataofthelinklistare:1325Q:make2functionsforcreatinglinklistandoutputlinklist:1.structnode*creat(void)2.voidprint(structnode*head)structnode*creat(void)/*createlinklistfunction*/{structnode*head,*p,*last;
intx;head=(structnode*)malloc(LEN);last=head;while(1){scanf("%d",&x);if(x<=0)break;p=(structnode*)malloc(LEN);p->num=x; last->next=p; last=p; }last->next=NULL;p=head;head=head->next;free(p);return(head);}
2、outputlinklist1、installlinklist四、realizingbyfunction:voidprint(structnode*head)/*outputlinklistfunction*/{structnode*p;
p=head;while(p!=NULL)/*traversingthelinklist*/{printf("%5d",p->num); p=p->next;}
printf("\n");getch();}main(){structnode*head;
printf("inputdatatocreat
linklist(endby<=0):\n");head=creat();
printf("thedataoflinklist:\n");print(head);}Q:computingthemaxinum
andmininumofthedatanode10.5.3insertoperationtolinklist[eg10.8]createafunctioninsert()torealizeinsertinganewnodewhichdataisxaftertotheIstnodewhichispointedbyhead.analysis
:
comonsituationpre-inserted:
after-inserted:
standartconsideration:
alongthepointerareaofthenodetofindtheist
node,finallyinsertnewnodeaftertheistnodebylinklistheadpointerhead
1325NULL44ps
132head5NULLSpecialsituation:1、nulllistpre=inserted:head=NULLafter-inserted:2、i=0pre-inserted:
after-inserted:3、iout-of-range(i>thenumberofnode)
disposingmanner:(1)error(2)inserttothetailhead4NULL4s
132head5NULLhead
4125NULL3structnode*insert(structnode*head,int
i,intx){structnode*s,*p;s=(structnode*)malloc(LEN);s->num=x;if(head==NULL){head=s;s->next=NULL;}/*1、inserttothenulllinklist*/elseif(i==0) /*non-nulllinklist*/ {s->next=head;head=s;}/*2、newnodeasnewheadnodeoflinklist*/else {p=head;/*lookuptheist
node(pointedbyp)*/for(;p!=NULL&&i>1;p=p->next,i--);if(p==NULL) /*3、errorout-of-range*/
printf("Outoftherange,can'tinsert!\n");else /*4、commonsituation:ppointtotheistnode*/ {s->next=p->next;p->next=s;}}return(head);}main(){structnode*head;
inti,x;
printf("inputdatatocreat
linklist(endby<=0):\n");head=creat();
printf("thedataoflinklist:\n");print(head);
printf("insert:i,x=");scanf("%d%d",&i,&x);insert(head,i,x);
printf("thedataoflinklistafterinserted:\n");print(head);}10.5.4thedeleteoperationtolinklist[eg10.8]designafunctiondelete(),todeletethenodewhosedataisxinthelinklist。Commonsituation:Pre-deleted:After-deleted:
q=head;p=q->next;/*lookupthenodewhosevalueisx*/for(;p->num!=x&&p!=NULL;q=p,p=p->next);
if(p!=NULL)/*iffindit,ppointstothex,qpointstotheearlierone*/{q->next=p->next;free(p);}
132head5NULLhead
1325NULL4qpespescial:1、NULLlisthead=NULLerrorinformation2、deletetheheadnodepre-deleted:
after-deleted:3、nosuchnodeerrorinformationhead
4125NULL3head125NULL3structnode*delete_list(structnode*head,intx){structnode*p,*q;if(head==NULL)/*1、blanklist*/
printf("Error!Thelistisempty.\n");elseif(head->num==x)/*2、deletethefirstnode*/head=head->next;else {q=head;p=q->next;for(;p->num!=x&&p!=NULL;q=p,p=p->next); if(p==NULL)/*3、notexist*/
printf("Error!Thenumbeisnotexsist.\n");else{q->next=p->next;free(p);}/*deleteunheadednode*/ }return(head);}10.5.5colligatedexample:menuprogramdesigning/*=======sortedlink_list
operater=======*//*DesignedbySunQiaoping*/#include"stdio.h";#defineNULL0#defineLENsizeof(structnode)structnode{intnum;
structnode*next;};charmenu(void);voidprint(structnode*head);structnode*insert_sortedlist(structnode*head,intx);structnode*creat_sortedlist(void);structnode*delete_list(structnode*head,intx);main(){structnode*head=NULL;
inti,x,flag=1;charch;do{ch=menu();
clrscr();switch(ch){case'1':head=creat_sortedlist();break; case'2':printf("inputanumbertoinsert.x=");
scanf("%d",&x); head=insert_sortedlist(head,x);break; case'3':
printf("inputanumbertodelete.x=");
scanf("%d",&x); head=delete_list(head,x);break; case'4':print(head);break; case'0':flag=0;}}while(flag==1);}/*========menu========*/charmenu(void){charch;
clrscr();
printf("MENU\n");/*puts()*/
printf("==================\n");
printf("1.creat\n");
printf("2.insert\n");
printf("3.delete\n");
printf("4.print\n");
printf("0.exit\n");
printf("==================\n");
printf("Inputyourchoice(0,1,2,3,4):");
ch=getchar();
return(ch);}/*========insert========*/structnode*insert_sortedlist(structnode*head,intx){structnode*s,*p,*q;s=(structnode*)malloc(LEN);s->num=x;if(head==NULL)/*inserttoablanklist*/{head=s;s->next=NULL;}elseif(x<=head->num)/*inserttoheadoflist*/ {s->next=head;head=s;}else {q=head;p=q->next;/*lookuptheplacetoinsert*/ for(;p!=NULL&&x>p->num;q=p,p=p->next); s->next=p;/*insertafterqandaheadofp*/q->next=s; }return(head);}Pre-inserted:After-inserted:head
1368NULL44qs
136head8NULLp/*========creat========*/structnode*creat_sortedlist(void){structnode*head;
intx;
printf("inputdatatocreat
linklist(endby<=0):\n");head=NULL;while(1){scanf("%d",&x);if(x<=0)break;
head=insert_sortedlist(head,x);}return(head);}10.6introductiontounionandenum10.6.1union
1.conception
severalvariablesofdifferenttypeoccupythesamesegmentofstorage.
2.Definitionofunion
commonsituation:unionu_name {memberlist };
eg.uniondata {inti; charch; floatf; };
Sameasdefinitionofstructuretype
3.DefinitionofSharingvariables(1)indirectdefinition
eg:uniondataun1,un2,un3;
(2)directdefiniton──definitevariableswhendefinitingtype
eg.union[data]{inti;charch;floatf;}un1,un2,un3;4.Thestoragelengthoccupiedbysharingvariables:thelengthoflongestmember5.Citingtosharingvariables──citingonebyone例如:un1.i、un1.ch、un1.f5.characteristic
(1)Systemusestheoverlayingtechonologytorealizememorysharingofthesharingvariables’members,soanytimethereisonlyonemembervaluetostoreandbetake.eg,ifun1.i=1,un1.ch=‘c’,un1.f=3.14,
un1.fisthevalidmember.(2)TheaddressofSharingvariableisthesameasthatofeverymember.eg
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 政府采购合同(2篇)
- 搭建车棚安全协议书(2篇)
- 2024年度有机蔬菜种植基地委托培育种苗专项合同3篇
- 2024年甲乙双方关于共建绿色能源发电项目的合作协议
- 2025年洛阳大车货运资格证考试题
- 2025年济宁资格证模拟考试
- 2025年贺州怎么考货运从业资格证
- 2025年凉山州b2货运资格证模拟考试
- 2024年标准化消防系统工程劳务分包合同一
- 《酒店笑话》课件
- 第2课“一国两制”与祖国统一
- 2022年国家公务员考试《行测》真题(副省级)及答案解析
- 第10章-就业指导
- 【初中语文】《为你点赞》作文讲评课件-2024-2025学年统编版(2024)语文七年级上册
- 不做手机控课件
- 带式运输机传动装置的设计
- 四年级数学(上)计算题专项练习及答案
- 通信工程施工方案
- 信息技术(第2版)(拓展模块)教案 拓展模块5 5.3常用核心技术3
- 220kV耐张线夹检测报告
- 储能系统振动噪声控制
评论
0/150
提交评论