分校C课件第17讲高级数据结构.ppt

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

第十七讲 高级数据结构 动态数据结构 Dynamic data structures(动态数据结构) 在程序的执行过程中可以增长和缩短的数据结构。 Linked lists(链表) 在任何地方进行插入和删除。 Stacks(栈) 在栈的顶端进行插入和删除。 Queues(队列) 在队列的末尾删除,在队列的前面插入。 自引用的结构体 自引用的结构体 包含指向相同结构类型的指针成员 可以链接到一起,构成有用的数据结构: 链表 栈 队列 树 栈,是硬件。主要作用表现为一种数据结构,是只能在某一端插入和删除的特殊线性表。 栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。 栈也称为先进后出表。 栈可以用来在函数调用的时候存储断点,做递归时要用到栈! 栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。 栈也称为先进后出表。 栈可以用来在函数调用的时候存储断点,做递归时要用到栈! 栈在程序的运行中有着举足轻重的作用。最重要的是栈保存了一个函数调用时所需要的维护信息,这常常称之为堆栈帧或者活动记录。堆栈帧一般包含如下几方面的信息: 1. 函数的返回地址和参数 2. 临时变量:包括函数的非静态局部变量以及编译器自动生成的其他临时变量。 1、进栈(PUSH)算法 ①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②); ②置TOP=TOP+1(栈指针加1,指向进栈地址); ③S(TOP)=X,结束(X为新进栈的元素); 2、退栈(POP)算法 ①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②); ②X=S(TOP),(退栈后的元素赋给X): ③TOP=TOP-1,结束(栈指针减1,指向栈顶)。 1、栈一般指局部变量,是用于保证程序正常执行需要的内存区域,函数调用中的形参、局部变量都放在这里,是由系统自动分配,生存期在使用完离开作用域后自动清理、自动销毁。栈中存放的是局部数据,当所定义的函数返回时,其局部变量都被释放。 2、堆是自由存储区,你可以自己申请内存,使用,但是你必须自己负责释放存储。否则会产生内存泄露。堆是用来存放程序通过malloc 或 new 动态分配的内存空间。记住,有malloc才会有free,有new才会有delete堆中存放的是全局数据,只有当程序返回,才会释放。 动态内存分配 处理动态链表,进行动态内存分配首先需要相关函数 库函数提供动态地开辟和释放存储单元的有关函数: 在程序执行期间获取或释放内存 相关的函数(stdlib.h) malloc() calloc函数 free() 相关的运算符 sizeof 动态内存分配 malloc()函数 void* malloc(size_t size);//函数原型 其作用是在内存的动态存储区中分配一个长度为size的连续空间,其函数的返回值是一个指向分配域起始地址的指针(类型void)。 size_t为sizeof返回的整数类型 一般用 sizeof 运算符确定对象的大小 返回值:指向分配内存的 void* 类型的指针 void* 类型的指针可以被赋值给任何类型的指针变量 如果函数未能成功执行,没有可用内存,则返回 NULL 动态内存分配 free()函数 void free(void* aPtr);//这是函数原形free函数无返回值。 其作用是释放aPtr指向的内存空间 aPtr指向的应该是最近一次用 malloc 分配的内存空间时返回的值。 动态内存分配 动态内存分配 #include stdlib.h #include alloc.h void* malloc(unsigned int size); 向系统申请大小为size的内存块,把首地址返回。如果申请不成功,返回NULL void* calloc(unsigned int num, unsigned int size); 向系统申请num个size大小的内存块,把首地址返回。如果申请不成功,返回NULL void free(void* p); 释放由malloc()和calloc()申请的内存块。p是指向此块的指针 void*类型的指针可以指向任意类型的变量 链表 链表 链表 用指针链接的自引用结构的线性集合,这些结构称为结点。 链

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档