《高级语言程序设计学课件》第11章1.pptVIP

  • 1
  • 0
  • 约2.13千字
  • 约 10页
  • 2018-12-02 发布于浙江
  • 举报

《高级语言程序设计学课件》第11章1.ppt

《高级语言程序设计学课件》第11章1

* 第11章 指针高级应用 * 动态内存分配 实现按需分配。根据程序的实际需要进行内存的分配和释放。以前的都是按计划分配(如数组必须指定长度) 动态内存分配相关函数(stdlib.h中) malloc(size):分配size个字节的存储空间 free(p) :释放指针p指向的之前已分配的空间 * 动态分配函数 malloc函数 void * malloc (unsigned int size); 作用:在内存的动态存储区中分配一个长度为 size的连续空间 返回值:成功,返回指向分配域起始地址的指针; 否则,返回空指针(NULL) 例如,由用户从键盘输入来确定一个数组的长度。 int n, *p; printf(”请输入数组的长度”); scanf(“%d”,n); p=(int *) malloc(n*4); if(p==NULL) printf(”分配失败”); else printf(”分配成功”); …… * free函数 void free (void * p); 作用:释放p指向的内存区,使这部分内存区能被其他变量使用。P是调用malloc时返回的值。 返回值:无返回值 动态释放函数 int n, *p; printf(”请输入数组的长度”); scanf(“%d”,n); p=(int *) malloc(n*4); if(p==NULL) printf(”分配失败”); else printf(”分配成功”); …… free(p); * 用结构体处理链表 链表概述 一种重要的数据结构。可以动态地进行存储分配一种结构 优点:插入、删除某个结点容易,不用移动数据。 例建立一个如下图所示的由3个学生数据简单链表 99101 89.5 num score next 99103 90 99107 85 NULL head 结点的结构 struct student { int num; float score; struct student *next; } * 建立链表 例 写一个建立链表的函数create struct student * create(int n) //创建有n个结点的单链表 { struct student *p, *q, *head; int i; p=(struct student *)malloc(sizeof(struct student )); …… //输入学号和成绩 head=p; for(i=0;in-1;i++) { q=(struct student *)malloc(sizeof(struct student )); …… //输入学号和成绩 p-next=q; p=q; } p-next=NULL; return head; } 99101 89.5 99103 90 99107 85 NULL head * 输出链表 例 写一个输出链表的函数print void print(struct student *head) { struct student *p=head; while(p!=NULL) { printf(“%d %5.1f\n”,p-num, p-score); p=p-next; } } 99101 89.5 99103 90 99107 85 NULL head p p p P=NULL * 对链表的删除 分析 A B C D E 关键问题: 找到要删除的点,设为p2 结点p2的前一个结点p1 p2 p1 p1-next = p2-next * 删除某个学生 struct student * del(struct student * head,int num) //删除学号为num的学生 { struct student *p1, *p2=head; if(head!=NULL) { while(p2-num!=num p2-next!=NULL) { p1=p2; p2=p2-next; } if(p2-num==num ) //找到 { if(p2==head) head=head-next; else p1-next=p2-next; free(p2); } return head; } 99101 89.5 99103 90 99107 85 NULL he

文档评论(0)

1亿VIP精品文档

相关文档