77范文网 - 专业文章范例文档资料分享平台

广工数据结构anyview答案(5)

来源:网络收集 时间:2019-02-16 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

{

if(fabs(p*p-A)=e))

return Sqrt(A,(p+A/p)/2,e); }

/***07*******

【题目】已知Ackerman函数的定义如下: akm(m,n) = n+1 当m=0 akm(m,n) = akm(m-1,1) 当m!=0,n=0 akm(m,n) = akm(m-1,akm(m,n-1)) 当m!=0,n!=0 请写出递归算法。 **********/

int Akm(int m, int n)

/* 若 m<0 或 n<0 则返回-1 */ {

if(m<0||n<0) return -1; if(m==0) return n+1;

if(m!=0&&n==0) return Akm(m-1,1);

if(m!=0&&n!=0) return Akm(m-1,Akm(m,n-1)); }

/***15*******

【题目】试写出求递归函数F(n)的非递归算法: F(n) = n+1 当n=0 F(n) = nF(n/2) 当n>0 **********/ int F(int n)

/* 如果 n<0 则返回 -1 */ {

int i = n;

if(n<0) return -1; if(n==0) return 1; n = n/2; while(n>0) {

i *=n; n = n/2; }

return i; }

/* //递归

if(n<0) return -1;

if(n==0) return 1;

if(n>0) return n*F(n/2); */

/***16*******

【题目】求解平方根 的迭代函数定义如下: sqrt(A,p,e) = p 当|p*p-A|=e

其中,p是A的近似平方根,e是结果允许误差。试写出相 应的非递归算法。 **********/

float Sqrt(float A, float p, float e) {

while(fabs(p*p-A)>=e) {

p = (p+A/p)/2;

} return p; }

/***20*******

【题目】假设以二维数组g[1..m][1..n]表示一个图像 区域,g[i][j]表示该区域中点(i,j)所具颜色,其值

为从0到k的整数。试编写递归算法,将点(i0,j0)所在 区域的颜色置换为颜色c。约定与(i0,j0)同色的上、 下、左、右的邻接点为同色区域的点。

表示图像区域的类型定义如下: typedef char GTYPE[m+1][n+1]; **********/

void ChangeColor(GTYPE g, int m, int n, char c, int i0, int j0) /* 在g[1..m][1..n]中,将元素g[i0][j0] */

/* 所在的同色区域的颜色置换为颜色c */ {

g[0][0] = g[i0][j0];

g[i0][j0] = c;

if(i0+1<=m&&g[0][0]==g[i0+1][j0]) ChangeColor(g, m, n, c, i0+1, j0); if(i0-1>=1&&g[0][0]==g[i0-1][j0]) ChangeColor(g, m, n, c, i0-1, j0); if(j0-1>=1&&g[0][0]==g[i0][j0-1]) ChangeColor(g, m, n, c, i0, j0-1); if(j0+1<=n&&g[0][0]==g[i0][j0+1]) ChangeColor(g, m, n, c, i0, j0+1); /*

g[0][0] = g[i0][j0];

g[i0][j0] = c;

if(g[0][0]==g[i0+1][j0]&&i0+1<=m) ChangeColor(g, m, n, c, i0+1, j0); if(g[0][0]==g[i0-1][j0]&&i0-1>=1) ChangeColor(g, m, n, c, i0-1, j0); if(g[0][0]==g[i0][j0-1]&&j0-1>=1) ChangeColor(g, m, n, c, i0, j0-1); if(g[0][0]==g[i0][j0+1]&&j0+1<=n) ChangeColor(g, m, n, c, i0, j0+1); */ }

第8章

/***06*******

【题目】编写复制一棵二叉树的递归算法。 二叉链表类型定义:

typedef char TElemType; // 设二叉树的元素为char类型 typedef struct BiTNode { TElemType data;

struct BiTNode *lchild, *rchild; } BiTNode, *BiTree; **********/

void CopyBiTree(BiTree T, BiTree &TT) /* 递归复制二叉树T得到TT */ {

BiTree t;

t = (BiTree)malloc(sizeof(BiTNode)); t->lchild = NULL; t->rchild = NULL; if(T ==NULL) return ; t->data = T->data ; TT = t;

CopyBiTree(T->lchild, TT->lchild); CopyBiTree(T->rchild, TT->rchild); }

/****11**************

void PreOrderi(BiTree T,int k,int &count,TElemType &A){ if(T == NULL) return ;

if(k == count) A = T->data; count++;

PreOrderi(T->lchild, k,count,A); PreOrderi(T->rchild, k,count,A);

}

/**********

【题目】编写递归算法,求对二叉树T先序遍历时 第k个访问的结点的值。 二叉链表类型定义: typedef struct BiTNode { TElemType data;

struct BiTNode *lchild, *rchild; } BiTNode, *BiTree; **********/

TElemType PreOrderK(BiTree T, int k)

/* 求对二叉树T先序遍历时第k个访问的结点的值。*/ /* 若失败,则返回'#' */ {

if(k == 0) return '#'; if(T == NULL) return '#'; int count = 1; TElemType A;

PreOrderi(T,k,count,A); return A; }

/****12******

【题目】编写递归算法,计算二叉树T中叶子结点的数目。 二叉链表类型定义: typedef struct BiTNode { TElemType data;

struct BiTNode *lchild, *rchild; } BiTNode, *BiTree; **********/

int Leaves(BiTree T)

/* 计算二叉树T中叶子结点的数目 */ {

int l,r;

if(NULL == T) return 0;

if(T->lchild ==NULL && T->rchild ==NULL) return 1; l = Leaves(T->lchild); r = Leaves(T->rchild); return l+r; }

/***21*******

【题目】试利用栈及其基本操作写出二叉树T的非递归 的先序遍历算法。 二叉链表类型定义: typedef struct BiTNode { TElemType data;

struct BiTNode *lchild,*rchild; } BiTNode, *BiTree;

可用栈类型Stack的相关定义:

typedef BiTree SElemType; // 栈的元素类型 Status InitStack(Stack &S); Status StackEmpty(Stack S);

Status Push(Stack &S, SElemType e); Status Pop(Stack &S, SElemType &e); Status GetTop(Stack S, SElemType &e); **********/

void PreOrder(BiTree T, void (*visit)(TElemType)) /* 使用栈,非递归先序遍历二叉树T, */ /* 对每个结点的元素域data调用函数visit */ {

Stack S; InitStack(S); BiTree p = T;

while(p!=NULL){ if(p !=NULL) {

while(p != NULL) {

visit(p->data);

if(p->rchild !=NULL) //把不为空的右结点入栈 Push(S,p->rchild ); p = p->lchild; } }

if(StackEmpty(S) != TRUE) Pop(S, p); else

p = NULL;//栈空表明遍历结束 } }

/***23*******

【题目】试利用栈及其基本操作写出二叉树T的非递归

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库广工数据结构anyview答案(5)在线全文阅读。

广工数据结构anyview答案(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/477709.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: