-C程序设计课件第12章-PPT.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《-C程序设计课件第12章-PPT.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 课件 12 PPT
- 资源描述:
-
1、50 目标代码空间目标代码空间静态区空间静态区空间库代码空间库代码空间堆区空间堆区空间栈区空间栈区空间类型定义形式类型定义形式 struct t 基本数据部分;基本数据部分;struct t *next;基本数基本数据部分据部分指针部分指针部分一个数据项一个数据项 top:.栈栈top:1.2b:2rear:front:.1a:rear:front:231 p:b:23NULLNULLbase:1.2N-1N.双向链双向链base:12N-1N.单向链单向链base:12N-1N.环形链环形链base:12N-1N.双向双向环形链环形链p =base;p0=NULL;while(p!=NULL
2、)p =base;加工加工 p-while(p!=NULL)p =p-next;加工加工 p-p0 =p;p =p-next;r:5p0:p:1 2 3 4.p0:1234.p:q:p0p123.q0 q456.p0:p:123.q0q:456.g:/*交换交换 p-next、q-next*/g =p-next;/*1*/p-next =q-next;/*2*/q-next =g;/*3*/*交换交换 p0-next、q0-next*/p0-next =q;/*4*/q0-next =p;/*5*/*交换交换 p、q*/p =p0-next;/*6*/q =q0-next;/*7*/*+-a/
3、d*bcef(a+b/c)*(d e*f)root:设设 ti 为二叉树的一个结点,一般为二叉树的一个结点,一般 ti 由两部分组成:由两部分组成:l基本数据部分基本数据部分-保存本结点上的基本数据;保存本结点上的基本数据;l指针部分连指针部分连-接本结点以下的其它结点。接本结点以下的其它结点。结点结点 ti 的指针连接的结点称为的指针连接的结点称为 ti 的的子结点子结点,相应相应 ti 称为其子结点的称为其子结点的父结点父结点。ti的指针部分有两个指针:左指针、右指针。的指针部分有两个指针:左指针、右指针。称称 ti 的左指针连接的部分为的左指针连接的部分为 ti 的的左子树左子树,ti
4、的右指针连接的部分为的右指针连接的部分为 ti 的的右子树右子树。若左、右子树均空,则称若左、右子树均空,则称 ti 为为叶结点叶结点。ti78563124ti:*+-a/d*bcef a/b c-d*e f*+-a/d*bcefa/bc-d*ef*+-a/d*bcefa/b c-d*e f由于由于 insert 的参数的参数 p 是指向指针的指针类型,在是指向指针的指针类型,在 insert 内内 p 指向指向指针类型的实在参数指针类型的实在参数。所以在执行。所以在执行*p=(treepointer)malloc(sizeof(struct tree)时,将使实在参数指针变量指向新申请来的结
5、点。时,将使实在参数指针变量指向新申请来的结点。1)若调用若调用 insert 时,如图时,如图 root 为空树。为空树。以以&root 作实在参数调用作实在参数调用 insert,即即 insert(c,d,&root)insert 的形式参数的形式参数 p 指向指向 root,而,而 root 值为值为 NULL。转插入功能,执行转插入功能,执行 *p=(treepointer)malloc(sizeof(struct tree)得得:再执行后边的几个赋值语句再执行后边的几个赋值语句,得得:root:c;d p:2)若调用若调用insert时,时,root非空,在中间某一个结点查到空指非
6、空,在中间某一个结点查到空指 针,如图;设查到该结点后,应该继续向右查,以针,如图;设查到该结点后,应该继续向右查,以&(*p)-right)作实在参数递归调用作实在参数递归调用insert,即执行,即执行 insert(c,d,&(*p)-right)insert 的形式参数的形式参数 p 指向本步的指向本步的(*p)-right,而,而(*p)-right 值为值为 NULL。转插入功能,执行转插入功能,执行 *p=(treepointer)malloc(sizeof(struct tree)再执行后边的几个赋值语句再执行后边的几个赋值语句,得得:c;d .p:n删除一结点删除一结点设欲删
7、除结点为设欲删除结点为 r,则可能有如下几种情况。针对不同,则可能有如下几种情况。针对不同情况删除算法不同情况删除算法不同.r 是叶结点是叶结点:简单删掉简单删掉 r 结点,并把结点,并把 r 的父结点连接处改的父结点连接处改成成NULL 即可即可。42513r:r 只有一个左子树只有一个左子树78563124r:78564231r:r 只有一个子树只有一个子树:把把 r 以下部分接入以下部分接入 r 的父结点连接的父结点连接 r 处。处。然后删掉然后删掉r结点结点。r 只有一个右子树只有一个右子树r 两个方向都有子树两个方向都有子树:在在 r 的左子树上找到关键字的左子树上找到关键字 key
8、 值值最大的结点最大的结点 s,把,把 s 结点的数据结点的数据 data及关键字及关键字 key 复制复制到到 r 结点上,然后删除掉结点上,然后删除掉 s 结点。结点。9s:10r:4514151213312118679当然也可以在当然也可以在r的右子树上找到关键字的右子树上找到关键字key值最小的结点值最小的结点s,把,把s结点的数据结点的数据data及关键字及关键字key复制到复制到r结点上,然结点上,然后删除掉后删除掉s结点。结点。8s:5r:410131411123129766使用在左子树上找最大结点的方法,按如使用在左子树上找最大结点的方法,按如下步骤进行下步骤进行:沿沿 r 左
9、子树的右方向,向下找一个没有左子树的右方向,向下找一个没有右子树的结点右子树的结点s,图中结点,图中结点(9)。把该结点把该结点 s 的值复制到结点的值复制到结点r(即欲删除(即欲删除的结点。的结点。把把 s 的左子树连在的左子树连在 s 的父结点(图中为的父结点(图中为结点结点(5))的右链上,在图中即连到)的右链上,在图中即连到(5)结点的右链上。结点的右链上。删除删除s结点,即图中的结点,即图中的(9)结点。结点。图图3的情况的情况 r 两个方向都有子树两个方向都有子树:在在 r 的左子树上找到关键字的左子树上找到关键字 key 值值最大的结点最大的结点 s,把,把 s 结点的数据结点的
展开阅读全文