- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)