《结构体数组学习》PPT课件.ppt

上传人:za****8 文档编号:12722971 上传时间:2020-05-19 格式:PPT 页数:57 大小:562.06KB
返回 下载 相关 举报
《结构体数组学习》PPT课件.ppt_第1页
第1页 / 共57页
《结构体数组学习》PPT课件.ppt_第2页
第2页 / 共57页
《结构体数组学习》PPT课件.ppt_第3页
第3页 / 共57页
点击查看更多>>
资源描述
,一、结构体数组,形式一:间接定义structstudentintnum;charname20;studentstu2;,形式二:直接定义structstudentintnum;charname20;stu2;,形式三:无名定义structintnum;charname20;stu2;,结构数组的初始化,顺序初始化:structstudentintnum;charname20;intage;studentstu=200401,“WangYong”,19,200402,“LiGang”,20;,如果对所有数组元素赋初值,则数组元素个数可省略。,分行初始化:structstudentintnum;charname20;intage;studentstu=200401,“WangYong”,19,200402,“LiGang”,20;,结构数组的引用,引用形式:结构数组名下标.成员名(结构数组元素.成员名)例如:stu0.num,structstudentintnum;charname20;charsex;intage;stu3;,stu1.age+;,cinstu0.name;strcpy(stu0.name,“ZhaoDa”);,cinstu1.num;,EXAMPLE2.Sortbystudentaver,#include#include#includeusingnamespacestd;structGradeints1;ints2;ints3;floataver;structStudentRecintnum;stringname;Grades;,typedefstructStudentRecSTUDENT;STUDENTinputstu(int);voidsort(STUDENTstu,int);voidmain()STUDENTstu6;for(inti=0;i=0;i-)cout6-i:stui.numsetw(6)leftstui.namestui.s.averendl;,声明结构体数组,用结构体数组名作实参,voidsort(STUDENTstu,intn)inti,j,min;STUDENTt;for(i=0;in;i+)min=i;for(j=i+1;j成员名结构指针的运算:,1.指向结构变量的指针,(*s).num,structstudentintnum;charname20;charsex;intage;studentstu;student*s=,指针不仅可以指向普通变量、数组、数组元素、函数,同样的,指针也可以指向结构变量,我们把指向结构变量的指针称为结构指针。结构指针指向了结构变量所在存储空间的起始地址。,定义形式:结构类型名*结构指针名;使用结构指针引用结构成员:方法一:(*结构指针).成员名方法二:结构指针-成员名结构指针的运算:,1.指向结构变量的指针,(*s).num,s是结构指针,(*s)表示s指向的结构变量stu,(*s).num表示s所指的结构变量中的成员num,所以(*s).num的意义是先访问结构指针所指向的结构变量,再访问该结构变量中的成员。由于结构成员运算符“.”优先于指针运算符“*”,故(*s).num中的括号()不能省略。,s-num,指向结构成员运算符优先级和“.”同级别结合性是左结合,指针不仅可以指向普通变量、数组、数组元素、函数,同样的,指针也可以指向结构变量,我们把指向结构变量的指针称为结构指针。结构指针指向了结构变量所在存储空间的起始地址。,定义形式:结构类型名*结构指针名;使用结构指针引用结构成员:方法一:(*结构指针).成员名方法二:结构指针-成员名结构指针的运算:,1.指向结构变量的指针,(*s).num,s-num,常用运算符的优先级顺序:一级运算符(-.)单目运算符(!+-*使用结构指针引用结构成员:方法一:(*结构指针).成员名方法二:结构指针-成员名结构指针的运算:,1.指向结构变量的指针,(*s).num,s-num,结构指针指向的是结构变量所在存储空间的首地址。将结构指针加1,则指针指向内存中下一个结构变量,其地址的增加量取决于指针所指向的结构的长度。coutnum;/输出结构成员num的值。coutnum+;/*先输出结构成员num的值,然后将该值加1。*/coutnum;/*先取结构成员num的值,然后将该值加1,之后再输出。*/coutnum;/*先输出num的值,然后指针加1,指向下一个结构变量。*/,在C+语言中,把指向结构数组或数组元素的指针称为结构数组指针。,#includestructstudentintnum;charname20;floatscore;,2.指向结构体数组的指针,例使用结构数组指针输出数据,voidmain()studentstu3=1001,LiuJin,75,1002,LiLan,82,1003,MaKai,80;student*s=stu;coutnumnamescorenum不等于0,而且不是第一个结点(n1)时,则应将新建结点与前一个结点连接在一起,即:执行p2-next=p1,使第一个结点的next成员指向第二个结点。接着使p2p1,即:使p2指向刚刚建立的结点(即建立链表进程中的最后一个结点)。,建立中间结点,(n=2),p2,p1,head,0001,89.5,然后利用new再开辟一个新的存储空间,用来存放另一个结点,并使p1指向新开辟的存储空间,然后输入该结点的数据。如果输入的p1-num不等于0,而且不是第一个结点(n1)时,则应将新建结点与前一个结点连接在一起,即:执行p2-next=p1,使第一个结点的next成员指向第二个结点。接着使p2p1,即:使p2指向刚刚建立的结点(即建立链表进程中的最后一个结点)。,建立中间结点,(n=2),0002,76,p2,p1,head,0001,89.5,然后利用new再开辟一个新的存储空间,用来存放另一个结点,并使p1指向新开辟的存储空间,然后输入该结点的数据。如果输入的p1-num不等于0,而且不是第一个结点(n1)时,则应将新建结点与前一个结点连接在一起,即:执行p2-next=p1,使第一个结点的next成员指向第二个结点。接着使p2p1,即:使p2指向刚刚建立的结点(即建立链表进程中的最后一个结点)。,建立中间结点,(n=2),0002,76,p2,p1,head,0001,89.5,然后利用new再开辟一个新的存储空间,用来存放另一个结点,并使p1指向新开辟的存储空间,然后输入该结点的数据。如果输入的p1-num不等于0,而且不是第一个结点(n1)时,则应将新建结点与前一个结点连接在一起,即:执行p2-next=p1,使第一个结点的next成员指向第二个结点。接着使p2p1,即:使p2指向刚刚建立的结点(即建立链表进程中的最后一个结点)。,(n=2),0002,76,p2,head,0001,89.5,0002,76,重复步骤,依次建立若干个新结点。每次都让p1指向新建立的结点,p2指向链表中最后一个结点,然后用“p2-next=p1”,把p1所指的结点连接到p2所指结点的后面。当输入某个结点数据后,如果p1-num等于0,则不再执行上述循环,此新结点不应该被连接到链表中,用语句“p2-next=NULL”,将NULL值赋给前一个结点的next成员。至此,建立链表的过程结束。,p1,(n=2),p2,head,0001,89.5,0002,76,重复步骤,依次建立若干个新结点。每次都让p1指向新建立的结点,p2指向链表中最后一个结点,然后用“p2-next=p1”,把p1所指的结点连接到p2所指结点的后面。当输入某个结点数据后,如果p1-num等于0,则不再执行上述循环,此新结点不应该被连接到链表中,用语句“p2-next=NULL”,将NULL值赋给前一个结点的next成员。至此,建立链表的过程结束。,p1,0003,88,p2,head,0001,89.5,0002,76,重复步骤,依次建立若干个新结点。每次都让p1指向新建立的结点,p2指向链表中最后一个结点,然后用“p2-next=p1”,把p1所指的结点连接到p2所指结点的后面。当输入某个结点数据后,如果p1-num等于0,则不再执行上述循环,此新结点不应该被连接到链表中,用语句“p2-next=NULL”,将NULL值赋给前一个结点的next成员。至此,建立链表的过程结束。,0003,88,p2,head,0001,89.5,0002,76,重复步骤,依次建立若干个新结点。每次都让p1指向新建立的结点,p2指向链表中最后一个结点,然后用“p2-next=p1”,把p1所指的结点连接到p2所指结点的后面。当输入某个结点数据后,如果p1-num等于0,则不再执行上述循环,此新结点不应该被连接到链表中,用语句“p2-next=NULL”,将NULL值赋给前一个结点的next成员。至此,建立链表的过程结束。,0003,88,0,0,p1,NULL,建立表尾结点,structstudent*creat()student*head,*p1,*p2;head=NULL;/在没有创建任何结点时,表头指向空p1=newstudent;/创建一个新结点-(1)p2=p1;cinp1-nump1-score;/*输入第一个结点的学生数据*/,p2,p1,head,0001,89.5,(n=1),建立表头结点,while(p1-num!=0)/-(2)n+;if(n=1)head=p1;/将链表中第一个新建结点作为表头elsep2-next=p1;p2=p1;p1=new(student);/新建一个结点cinp1-nump1-score;deletep1;p2-next=NULL;returnhead;/返回表头指针/endcreat,while(p1-num!=0)/-(2)n+;if(n=1)head=p1;/将链表中第一个新建结点作为表头elsep2-next=p1;p2=p1;p1=new(student);/新建一个结点cinp1-nump1-score;deletep1;p2-next=NULL;returnhead;/返回表头指针/endcreat,建立中间结点,(n=2),0002,76,p1,p2,while(p1-num!=0)/-(2)n+;if(n=1)head=p1;/将链表中第一个新建结点作为表头elsep2-next=p1;p2=p1;p1=new(student);/新建一个结点cinp1-nump1-score;deletep1;p2-next=NULL;returnhead;/返回表头指针/endcreat,while(p1-num!=0)/-(2)n+;if(n=1)head=p1;/将链表中第一个新建结点作为表头elsep2-next=p1;p2=p1;p1=new(student);/新建一个结点cinp1-nump1-score;deletep1;p2-next=NULL;returnhead;/返回表头指针/endcreat,0,0,p1,while(p1-num!=0)/-(2)n+;if(n=1)head=p1;/将链表中第一个新建结点作为表头elsep2-next=p1;p2=p1;p1=new(student);/新建一个结点cinp1-nump1-score;deletep1;p2-next=NULL;returnhead;/返回表头指针/endcreat,p1,NULL,建立表尾结点,while(p1-num!=0)/-(2)n+;if(n=1)head=p1;/将链表中第一个新建结点作为表头elsep2-next=p1;p2=p1;p1=new(student);/新建一个结点cinp1-nump1-score;deletep1;p2-next=NULL;returnhead;/返回表头指针/endcreat,输出链表就是将链表中各结点的数据依次输出。首先要知道链表第一个结点的地址,也就是要知道表头结点head的值,然后依次通过各结点next的值找到下一个结点,就可以依次输出所有结点的数据,直到链表的尾结点为止。,voidmain()structstudent*head1;cout“inputrecords:”next。这时,head指向了原来的第二个结点。此时,第一个结点虽然还存在,但它已与链表脱离,因为链表中没有一个结点或头指针指向它,也就不能访问它了,即已被删除。,要删除的结点分两种情况:要删除的不是第一个结点,则应执行p2-next=p1-next,即p2-next指向了p1-next所指向的结点,p1所指向的结点就被删除而不再是链表的成员了。,structstudent*dele(student*head,longnum)student*p1,*p2;if(head=NULL)coutnum!=num,对链表的插入是指将一个结点插入到一个已有的链表中。为简单起见,假设有一个学生链表,各结点已按其成员学号(num)的值由小到大顺序排列,现在要插入一个学生的结点,要求按学号的顺序插入。,过程分析:先将要插入的结点学号与第一个结点的学号相比,若小则插入到第一个结点前面,否则与第二个结点相比,如此重复,直到找到一个比它大的学号插入到它的前面或链表结束插入到链表的尾部。,对链表的插入操作,过程实现:,要插入结点指针,前移指针,紧随指针,过程实现:,过程实现:,0002,89.5,head,structstudent*insert(student*head,student*stud)structstudent*p0,*p1,*p2;p1=head;/p1指向第一个结点p0=stud;/p0指向待插入的结点if(head=NULL)/原来的链表是空表head=p0;p0-next=NULL;/使p0指向的结点作为头结点elsewhile(p0-nump1-num)/p1后移一个结点,插入结点的函数如下:函数的参数是head和要插入的结点存储空间首地址指针(stud),函数的返回值是链表头指针head,head的值可能在函数执行过程中被改变(当插入到第一个结点之前时)。,if(p0-numnum)if(head=p1)head=p0;/插入到第一个结点前面elsep2-next=p0;/插入到p2指向的结点后面p0-next=p1;elsep1-next=p0;p0-next=NULL;/插入到最后的结点后面n=n+1;/链表结点个数加1return(head);,综合实习:,数组、结构体与指针,链表操作:,创建链表,输出链表,Main(),删除结点,插入结点,EXAMPLE2.,用结构体数组对10名学生的成绩进行排序(冒泡法和选择法)。,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!