动态内存分配链表.ppt

  1. 1、本文档共83页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态内存分配链表

第10章 链表;批量数据的存储;主要内容;1 动态内存分配; ;1、栈区(stack):编译器自动分配释放,存放函数参数、局部变量等。 2、堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由操作系统回收。 3、全局区(静态区)(static):存放全局变量和静态变量,其中初始化的全局与静态变量在一块区域,未初始化的全局与静态变量在相邻的另一块区域。程序结束后由系统释放。 4、文字常量区:存放常量字符串,程序结束后由系统释放。 5、程序代码区:存放函数体的二进制代码。;1-2 内存分配方式;1-2 内存分配方式;1-2 内存分配方式;1-2 内存分配方式;1-3 C的动态内存分配函数;1-3 C的动态内存分配函数;1-3 C的动态内存分配函数;1-3 C的动态内存分配函数;1-3 C的动态内存分配函数;1-3 C的动态内存分配函数;1-3 C的动态内存分配函数;1-3 C的动态内存分配函数;1-3 C的动态内存分配函数;1-3 动态内存分配函数;主要内容;2 链表概述;2-1 结点的结构;2 -1结点结构; 以链表中第一个数据元素的存储地址作为链表的地址,称作链表的头指针;头结点;2 -2单链表结构;2-2单链表结构;3单链表结点的基本操作;3-1结点的查找;3-1结点的查找;struct node { int data; struct node *next; }; struct node *search(struct node *head,int key) //head为单链表的头指针; { struct node *p; //p为游动指针; p=head-next; //游动指针指向第一个实际结点; while(p!=NULL) //p为空表示链表已经访问结束; { if(p-data==key) return(p); //找到,返回该结点的地址; else p=p-next; //未找到,指向下一个结点继续查找; } return NULL; //循环正常结束,说明不存在该结点; };3-2链表结点的插入;一、开辟新结点;二、修改指针域;void insert(struct node *p,int key) { struct node *q; q= (struct node *) malloc(sizeof(sturuct node)); if(!q) { printf(不能分配内存空间!); exit(0); } q-data=key; q-next=NULL; q-next=p-next; p-next=q; };链表中结点的插入并不需要元素的移动,只需要作指针域的修改即可。 首先修改新结点的指针域,指向下一个元素;再修改前一个元素的指针域,指向新元素。 这两者的顺序是否可以颠倒?为什么?;3-3链表结点的删除;5;int del(struct node *head,int key) { struct node *p,*q; int flag=0; p=head; while(p-next!=NULL) { if(p-next-data==key) { flag=1; break; } else p=p-next; } //如果链表存在值为key的结点,找到其前驱结点p,flag变量置1; if(flag==1) { q=p-next; p-next=q-next; free(q); return 1; } else return 0; };4单链表的建立;顺序建链表。 逆序建链表。;4-1逆序建链表;4-1逆序建链表;4-1逆序建链表;4-1逆序建链表;struct node * creat1(int n) { struct node * head,* p; int i; head=(struct node *)malloc(sizeof(struct node)); head-next=NULL; for(i=1;i=n;i++) { p=(struct node *)malloc(sizeof(struct node)); scanf(%d,p-data); p-next=head-next; head-next=p; } return(head); };顺序建链表也是一个结点逐个插入的过程,只不过逆序建链表每次都是在头结点之后插入,而顺

文档评论(0)

wuyoujun92 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档