第10章动态数组与链表题材.pptVIP

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十章 动态数组与链表;内存分配方式;引入问题;动态存储分配函数;int *p,n; Scanf(“%d”,n); p= malloc(n); ;#include stdio.h #include malloc.h void main() { float *p,s=0; int num,i; scanf(%d,num); p=(float*)malloc(num); for (i=0;inum;i++) scanf(%f,p+i); for (i=0;inum;i++) printf(%6.2f,*(p+i)); for (i=0;inum;i++) s=s+(*(p+i)); printf(\n%f,s/num); };free函数;#includestdlib.h #includestring.h #includestdio.h void main() { char *str; char* m(); str=m(); printf(String is %s\n,str); } char* m() { char * str; str=(char *)malloc(10*sizeof(char)); strcpy(str,china); printf(String is %s\n,str); // free(str); //考察str所指向的空间什么时候被回收? printf(String is %s\n,str); return str } ;realloc函数; #include stdio.h #include string.h #include malloc.h main() { struct stu {int num; char *name; char sex; float score[10]; struct stu *q; }*p; p=(struct stu *)malloc(sizeof(struct stu)); scanf(“%s”,p-name);%出现错误!!!Name所指向的存储空间不可用 printf(%s,(*p).name); };例:跳马。依下图将每一步跳马之后的位置(x,y)放到一个“结点”里,再用“链子穿起来”,形成一条链,相邻两结点间用一个指针将两者连到一起。;依上图有7个结点; struct node { int x; int y; };;链表的几个基本概念; 链表的基本操作;1) 创建链表;2)打印输出链表;3)检索链表;4) 对链表的插入操作;5; 待插入结点p0实际上是第一个结点。这时必然有head==null。只要让头指针指向 p0 就可以了。; 链表已建成,待插入结点 p0 的数据要比头结点的数据还要小, (p0-num ) (head-num); 链表已建成,待插入结点 p0 的数据要比尾结点的数据还要大,; 链表已建成,待插入结点 p0 的数据大小位于已有链表中的中间, 假设p0 的数据比p2指向的数据大,比p1指向的数据小,即p0插入在p2和p1之间。 问题是:如何找到p1和p2?;6; 链表已建成,待插入结点 p0 的数据大小位于已有链表中的中间, 假设p0 的数据比p2指向的数据大,比p1指向的数据小,即p0插入在p2和p1之间。 问题是:如何找到p1和p2? ---通过循环实现;6;6;6; 操 作 分 析;在表尾插入;5) 对链表的删除操作;5) 对链表的删除操作;考虑两种情况: 1、要删的结点是头指针所指的结点(第一个结点); 2、删除的不是第一个结点。; struct node *delete(struct node *head, int x) { struct node *p1,*p2; p1=head; while(x!=p1-datap1-next!=NULL) /* 查找要删除的结点 */ { p2=p1;p1=p1-next;} if(x==p1-data) /* 找到了要删除的结点,准备删除 */ { if(p1==head) /*要删除的结点是头结点 */ head=p1-next; /* 将第二个结点的地址赋给head */ else /* 要删除

文档评论(0)

1112111 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档