网站大量收购独家精品文档,联系QQ:2885784924

数据结构-线性表资料.ppt

  1. 1、本文档共91页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1. realloc失败的时候,返回NULL 2. realloc失败的时候,原来的内存不改变,不会释放也不会移动 3. 假如原来的内存后面还有足够多剩余内存的话,realloc的内存=原来的内存+剩余内存,realloc还是返回原来内存的地址; 假如原来的内存后面没有足够多剩余内存的话,realloc将申请新的内存,然后把原来的内存数据拷贝到新内存里,原来的内存将被free掉,realloc返回新内存的地址 4. 如果size为0,效果等同于free()。这里需要注意的是只对指针本身进行释放,例如对二维指针**a,对a调用realloc时只会释放一维,使用时谨防内存泄露。 5. 传递给realloc的指针必须是先前通过malloc(), calloc(), 或realloc()分配的 6.传递给realloc的指针可以为空,等同于malloc。 7.程序结束后,现在操作系统会自动回收malloc申请的内存,但如果程序长时间运行,如果不进行正常的free,则会有内存泄露情况。建议都自行free。 栈满还存为上溢,栈空再取即下溢。 其好处有: (1) 对带头结点的链表,在表的任何结点之前插入结点或删除表中任何结点,所要做的都是修改前一结点的指针域,因为任何元素结点都有前驱结点。若链表没有头结点,则首元素结点没有前驱结点,在其前插入结点或删除该结点时操作会复杂些。 (2) 对带头结点的链表,表头指针是指向头结点的非空指针,因此空表与非空表的处理是一样的。 LNode *create_list(int n){ LNode *head,*p,*q; int i; p=(LNode*)malloc(sizeof(LNode));head=p; for(i=1;i=n,i++){ q=(LNode*)malloc(sizeof(LNode)); scanf(q-data);q-next=NULL; p-next=q;p=q; } return(head); } 建立结点的算法 2.建立有n个结点的单链表 单链表操作的实现 链表是一个动态的结构,它不需要予分配空间,因此生成链表的过程是一个结点“逐个插入” 的过程。 void ClearList(L) { while (L-next) { p=L-next; L-next=p-next; } } // ClearList free(p); 单链表操作的实现 3.重新置单链表为一个空表 从线性链表的第一个结点开始,依次查找是否存在与给定值相同的元素,若存在,返回OK,否则返回ERROR。 int Search_list(LinkList H, int e) { LinkList p; p=H-next; while(p) if(p-data==e) return OK; else p=p-next; return ERROR; } 单链表操作的实现 4. 线性链表的查找 5.单链表的插入 在链表中插入一个元素的示意图如下: x s b a p a b p 插入步骤(即核心语句): Step 1:s-next=p-next; Step 2:p-next=s ; p-next s-next 元素x结点应预先生成: S=(LinkList)malloc(m); S-data=x; 单链表操作的实现 Status ListInsert(LinkList L, int i, ElemType e) /* 在单链表L的第i个位置上插入值为e的元素 */ { p=L; j=0; while(pji-1){p=p-next; ++j;} if(!p||ji-1)return ERROR; s=(LinkList)malloc(sizeof(Lnode)); s-data=e; s-next=p-next; p-next=s; return OK; } 单链表结点插入的演示 单链表操作的实现 5. 单链表的删除 在链表中删除某元素的示意图如下: c a b p 删除步骤(即核心语句): q = p-next; //保存b的指针,靠它才能指向c p-next=q-next; //a、c两结点相连 free(q) ; //删除b结点,彻底释放 p-next 思考: 省略free(q)语句行不行? (p-next) - next × × 单链表操作的实现 Status ListDelete(LinkList L, int i, ElemType e) { p=L; j=0; while(

文档评论(0)

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

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

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档