文档详情

C语言课件(清华大学)第11章_结构体.ppt

发布:2017-06-09约2.31万字共102页下载文档
文本预览下载声明
第十一章 本章要点 结构体的概念 结构体的定义和引用 结构体数组 主要内容 11.1 概述 11.2 定义结构体类型变量的方法 11.3 结构体变量的引用 11.4 结构体变量的初始化 11.5 结构体数组 11.6指向结构体类型数据的指针 11.7 用指针处理链表 11.8 共用体 11.9 枚举类型 11.10 用typedef定义类型 int main( ){ student a, b, c, *head, *p; a. num=99101; a.score=89.5; b. num=99103; b.score=90; c. num=99107; c.score=85; head=a; a.next=b; b.next=c; c.next=NULL; p=head; do { printf ( %d %5.1f\n, p-num, p-score); p = p-next; } while ( p != NULL ); } printf(\ninput the inserted record:); stu = (struct student *) malloc(LEN); scanf (%ld,%f, stu-num, stu-score); while (stu-num!=0){ head = insert(head, stu); printf(input the inserted record:); stu = (struct student *) malloc(LEN); scanf (%ld,%f, stu-num, stu-score); } } 11.7 用指针处理链表 删除结点的函数del: struct student *del(struct student *head, int num) { struct student *p1, *p2; if (head==NULL) { printf(\nlist null!\n); goto end; } p1=head; while (num!=p1-num p1-next!=NULL) { p2=p1; p1=p1-next; } if (num == p1-num) { if (p1==head) head=p1-next; else p2-next=p1-next; printf ( delete: %ld \n, num); n=n-1; } else printf ( %ld not found!\n, num); end: return(head); } 11.7 用指针处理链表 11.7.7对链表的插入操作 对链表的插入是指将一个结点插入到一个已有的链表中。 为了能做到正确插入,必须解决两个问题: ① 怎样找到插入的位置; ② 怎样实现插入。 11.7 用指针处理链表 先用指针变量p0指向待插入的结点,p1指向第 一个结点。 将p0-num与p1-num相比较,如果p0-num> p1- num ,则待插入的结点不应插在p1所指的 结点之前。此时将p1后移,并使p2指向刚才p1 所指的结点。 11.7 用指针处理链表 再将p1-num与p0-num比,如果仍然是p0-num 大,则应使p1继续后移,直到p0-p1- num为止。 这时将p0所指的结点插到p1所指结点之前。但是如 果p1所指的已是表尾结点,则p1就不应后移了。如 果p0- num比所有结点的num都大,则应将p0所指 的结点插到链表末尾。 如果插入的位置既不在第一个结点之前,又不 在表尾结点之后,则将p0的值赋给p2-next,使 p2-next指向待插入的结点,然后将p1的值赋给 p
显示全部
相似文档