《工学结构体》ppt课件_第1页
《工学结构体》ppt课件_第2页
《工学结构体》ppt课件_第3页
《工学结构体》ppt课件_第4页
《工学结构体》ppt课件_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、结构体数组一、结构体数组形式一形式一: :间接定义间接定义 struct int num; char name20; ; stu2;numnamenumnamestu0stu124Bstu形式二形式二: :直接定义直接定义 struct int num; char name20;stu2;形式三形式三: :无名定义无名定义 struct int num; char name20;stu2;结构数组的初始化 顺序初始化顺序初始化: : struct int num; char name20; int age; ; stu =200401,“Wang Yong”, 19, 200402,“Li

2、 Gang”, 20; 初始值的初始值的、和和必须与其对应必须与其对应的结构成员一致的结构成员一致 如果对所有数组元素如果对所有数组元素赋初值赋初值, ,则数组元素则数组元素个数可省略。个数可省略。分行分行初始化初始化: : struct int num; char name20; int age; ; stu = 200401,“Wang Yong”, 19 200402,“Li Gang”, 20 ; 结构数组的引用:结构数组名下标 成员名 (结构数组元素 成员名)例如: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;声明结构体声明结构体数组数组用结构体数用结构体数组名作实参组名作实参 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指向结构成员运算符指向结构成员运算符优先级和优先级和“ ”同级别同级别结合性是结合性是 指针不仅可以指向普通变量、数组、 数组元素、函数,同样的,指针也可以指向,我们把指向结构变量的指针称为。结构指针指向了结构变量所在存储空间的。v定义形式: *结构指针名; ;v使用结构指针引用结构成员:(*结构指针) 成员名:结构指针成员名v结构指针的运算:1.指向结构变量的指针(*s).nums-num 常用运算符的优先级顺序: 运算符( - .)

6、运算符( ! + - - * & sizeof (类型) ) 运算符运算符运算符 条件符运算符运算符 访问结构变量中的结构成员共有访问结构变量中的结构成员共有: 结构变量结构变量. .成员名成员名 stu.num stu.num ( (* *结构指针结构指针).).成员名成员名 ( (* *s).nums).num 结构指针结构指针-成员名成员名 s-num s-num 指针不仅可以指向普通变量、数组、 数组元素、函数,同样的,指针也可以指向,我们把指向结构变量的指针称为。结构指针指向了结构变量所在存储空间的。v定义形式: *结构指针名; ;v使用结构指针引用结构成员:(*结构指针)

7、成员名:结构指针成员名v结构指针的运算:1.指向结构变量的指针(*s).nums-num 结构指针指向的是结构变量所在存储空间的首地址。将结构指针,则指针指向内存中,其地址的增加量取决于指针所指向的结构的长度。 coutnum; coutnum+; coutnum; coutnum; 在C+语言中,把指向结构数组或数组元素的指针称为。 #include struct int num; char name20; float score; ;2.指向结构体数组的指针 例例 使用结构数组指针输出数据 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运算符,在内存中开辟一个存储空间,用来存放新结点。使p1,p2都指向该存储空间,然后从键盘上输入一个学生的数据进行判断,如果输入的p1-num不等于0,而且是第一个结点数据(n1),则把p1的值赋给head(head=p1)(head=p1),这样,结构指针head就指向了链表中的第一个结点第一个结点。p2p1(n=1)建立表头结点建立表头结点000189

9、.5p2p1000189.5然后利用new再开辟一个新的存储空间,用来存放另一个结点,并使p1指向新开辟的存储空间新开辟的存储空间,然后输入该结点的数据。如果输入的p1-num不等于0,而且不是第一个结点(n1)时,则应将新建结点与前一个结点连接在一起,即:执行p2 - next=p1,使第一个结点的next 成员指向第二个结点。 接着使p2p1,即:使p2指向刚刚建立的结点刚刚建立的结点(即建立链表进程中的最后一个结点最后一个结点) 。建立中间结点建立中间结点(n=2)p2p1000189.5然后利用new再开辟一个新的存储空间,用来存放另一个结点,并使p1指向新开辟的存储空间新开辟的存储空

10、间,然后输入该结点的数据。如果输入的p1-num不等于0,而且不是第一个结点(n1)时,则应将新建结点与前一个结点连接在一起,即:执行p2 - next=p1,使第一个结点的next 成员指向第二个结点。 接着使p2p1,即:使p2指向刚刚建立的结点刚刚建立的结点(即建立链表进程中的最后一个结点最后一个结点) 。建立中间结点建立中间结点(n=2)000276p2p1000189.5然后利用new再开辟一个新的存储空间,用来存放另一个结点,并使p1指向新开辟的存储空间新开辟的存储空间,然后输入该结点的数据。如果输入的p1-num不等于0,而且不是第一个结点(n1)时,则应将新建结点与前一个结点连

11、接在一起,即:执行p2 - next=p1,使第一个结点的next 成员指向第二个结点。 接着使p2p1,即:使p2指向刚刚建立的结点刚刚建立的结点(即建立链表进程中的最后一个结点最后一个结点) 。建立中间结点建立中间结点(n=2)000276p2p1000189.5然后利用new再开辟一个新的存储空间,用来存放另一个结点,并使p1指向新开辟的存储空间新开辟的存储空间,然后输入该结点的数据。如果输入的p1-num不等于0,而且不是第一个结点(n1)时,则应将新建结点与前一个结点连接在一起,即:执行p2 - next=p1,使第一个结点的next 成员指向第二个结点。 接着使p2p1,即:使p2

12、指向刚刚建立的结点刚刚建立的结点(即建立链表进程中的最后一个结点最后一个结点) 。(n=2)000276p2000189.5000276重复步骤 ,依次建立若干个新结点。每次都让p1指向新建立的结点,p2指向链表中最后一个结点,然后用“p2-next=p1”,把p1所指的结点连接到p2所指结点的后面。当输入某个结点数据后,如果p1-num等于0,则不再执行上述循环,此新结点不应该被连接到链表中,用语句“p2-next=NULL”,将NULL值赋给前一个结点的next成员。 至此,建立链表的过程结束。p1(n=2)p2000189.5000276重复步骤 ,依次建立若干个新结点。每次都让p1指向

13、新建立的结点,p2指向链表中最后一个结点,然后用“p2-next=p1”,把p1所指的结点连接到p2所指结点的后面。当输入某个结点数据后,如果p1-num等于0,则不再执行上述循环,此新结点不应该被连接到链表中,用语句“p2-next=NULL”,将NULL值赋给前一个结点的next成员。 至此,建立链表的过程结束。p1000388p2000189.5000276重复步骤 ,依次建立若干个新结点。每次都让p1指向新建立的结点,p2指向链表中最后一个结点,然后用“p2-next=p1”,把p1所指的结点连接到p2所指结点的后面。当输入某个结点数据后,如果p1-num等于0,则不再执行上述循环,此

14、新结点不应该被连接到链表中,用语句“p2-next=NULL”,将NULL值赋给前一个结点的next成员。 至此,建立链表的过程结束。p1000388p2000189.5000276重复步骤 ,依次建立若干个新结点。每次都让p1指向新建立的结点,p2指向链表中最后一个结点,然后用“p2-next=p1”,把p1所指的结点连接到p2所指结点的后面。当输入某个结点数据后,如果p1-num等于0,则不再执行上述循环,此新结点不应该被连接到链表中,用语句“p2-next=NULL”,将NULL值赋给前一个结点的next成员。 至此,建立链表的过程结束。00038800p1建立表尾结点建立表尾结点str

15、uct student * creat( ) student *head,*p1,*p2; head = NULL; /在没有创建任何结点时,表头指向空在没有创建任何结点时,表头指向空 p1 = new student; /创建一个新结点创建一个新结点 -(1) p2 = p1; cinp1-nump1-score; /*输入第一个结点的输入第一个结点的 学生数据学生数据*/p2p1000189.5p2p1000189.5(n=1)建立表头结点建立表头结点while(p1-num != 0) / -(2) n +; if (n = 1) head = p1; / 将链表中第一个新建结点作为表头

16、将链表中第一个新建结点作为表头 else p2-next = p1; p2 = p1; p1 = new(student); / 新建一个结点新建一个结点 cinp1-nump1-score; delete p1; p2-next =NULL; return head; /返回表头指针返回表头指针 /end creatwhile(p1-num != 0) / -(2) n +; if (n = 1) head = p1; / 将链表中第一个新建结点作为表头将链表中第一个新建结点作为表头 else p2-next = p1; p2 = p1; p1 = new(student); / 新建一个结

17、点新建一个结点 cinp1-nump1-score; delete p1; p2-next =NULL; return head; /返回表头指针返回表头指针 /end creatp2000189.5建立中间结点建立中间结点(n=2)000276p1000189.5(n=2)000276p1p2while(p1-num != 0) / -(2) n +; if (n = 1) head = p1; / 将链表中第一个新建结点作为表头将链表中第一个新建结点作为表头 else p2-next = p1; p2 = p1; p1 = new(student); / 新建一个结点新建一个结点 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; / 将链表中第一个新建结点作为表头将链表中第一个新建结点作为表头 else p2-next = p1; p2 = p1; p1 = new(student); / 新建一个结点新建一个结点 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; / 将链表中第一个新建结点作为表头将链表中第一个新建结点作为表头 else p2-next = p1; p2 = p1; p1 = new(student); / 新建一个结点新建一个结点 cinp1-nump1-score; delete p1; p2-next =NULL; return head; /返回表头指针返回表头指针 /end creat000189.50002

20、76p2000388p1NULL建立表尾结点建立表尾结点while(p1-num != 0) / -(2) n +; if (n = 1) head = p1; / 将链表中第一个新建结点作为表头将链表中第一个新建结点作为表头 else p2-next = p1; p2 = p1; p1 = new(student); / 新建一个结点新建一个结点 cinp1-nump1-score; delete p1; p2-next =NULL; return head; /返回表头指针返回表头指针 /end creat 输出链表就是将链表中各结点的数据依次输出。首先要知道链表第一个结点的地址,也就是要

21、知道表头结点head的值,然后依次通过各结点next的值找到下一个结点,就可以依次输出所有结点的数据,直到链表的尾结点为止。void main( ) struct *head1; cout“input records:”endl; head1=creat( ); /*建立链表,建立链表, 并返回表头并返回表头*/ print(head1); /输出链表输出链表 例 函数调用两个函数和,实现链表的和链表数据的。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); 对链表的删除操作是把某个结点从链表中摘除,并不是真正从内存中将这个结点删除掉,使它脱离原来的链表,。 以指定的为删除标志。从指针变量p指向的第一个结点开始,检查该结点中的num是否为要删除的学号,如果是则将其删除;如果不是,则将

23、p移到下一个结点,再继续判断,直到删除或到表尾为止。 对链表的删除操作对链表的删除操作000189.5000276000388设两个指针和,先使p1指向第一个结点。如果p1所指的结点不是要删除的结点,就将p2指向p1所指的结点(),然后将p1指向下一个结点()。再继续判断p1所指的结点是不是要删除的结点,如此重复,直到找到要删除的结点并将其删除或是检查完全部链表为止。000189.5000276000388p1p2p1000189.5000276000388 要删除的结点分两种情况: 要删除的是第一个结点(即),则执行。这时,head指向了原来的第二个结点。此时,第一个结点虽然还存在,但它已与

24、链表脱离,因为链表中没有一个结点或头指针指向它,也就不能访问它了,即已被删除。p1000189.5000276000388 要删除的结点分两种情况:要 删 除 的 不 是 第 一 个 结 点 , 则 应 执 行 ,即p2-next指向了p1-next所指向的结点, p1所指向的结点就被删除而不再是链表的成员了。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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论