[试题]

阅读以下说明和流程图,从供选择的答案中选出应填入流程图(n)处的字句写在对应栏内。

[说明]

以下是某图像二元树存储与还原算法的主要思想描述。

设一幅2n×2n的二值图像,以:“1”表示黑像素点,以“0”表示白像素点。图像二元树结构表示依赖于图像的二元分割,即交替在X轴方向和Y轴方向上分割。先进行水平分割,分成两个2n-1×2n图像子块,然后进行垂直分割,分成4个2n-1×2n-1的正方形块,如此分割,直到子块只含同一像素点为止。如图8-8为一“E”字的二值图像,对其进行二元分割,相应的二元树如图8-9所示。根据图像二元树的0叶结点和1叶结点的数目,删除多者,保留少者。如“E”字图像的二元树0叶结点较多,裁剪后如图8-10所示。

裁剪后图像二元树有4类结点,分别用二进制编码如下:

◆ 左右儿子都有的结点,编码为11;

◆ 仅有左儿子的结点,编码为10;

◆ 仅有右儿子的结点,编码为01;

◆ 叶结点,编码为00。

存储时,先存储剩余叶结点的类型编码,二进制码00表示0叶结点,11表示1叶结点。再按层次顺序,自左至右存储裁剪后图像二元树各结点的编码。

图像二元树的存储算法用C语言描述所定义的数据结构及函数如下:

struct Node{ /*图像二元树结点*/

street Node*Left;

street Node*Righ t;

char Pixel;

}

struct Node Queue[MaxLen]; /*队列*/

InitQueue() /*初始化队列Queue的函数; */

E.mptyQueue () /*判断队列Queue是否为空的数,若空返回1,否则返回0; */

A.ddQueue(Item) /*将Item加到队列Queue的数; */

G.etQueue() /*取队列Queue第一个元素的函数; */

PutCode(Code) /*写2位二进制码Code到文件的函数*/

还原算法是存储算法的逆过程,将文件中的二进制码序列转换成图像二元树。还原算法的数据结构与函数与存储算法的相同,还原算法新增了一个函数GetCode ()。

G.etCode() /*从文件中读2位二进制码的函数*/

[C程序]

存储算法

void Backup (char CutPixel,st ruct Node ImageTree)'/*Cu tP ixel=0表示裁剪0叶结点*/

{ InitQueue();

A.ddQueue ( ImageTree ) ;

PutCode ( 1-CutPixel ) ;

While ( !EmptyQueue ( ) )

{ TreeNode= GetQueue ( ) ;

if (TreeNode→Left==NULL)

{ PutCode (0) ;

continue:

}

Tl= TreeNode→Left;

Tr= TreeNode→R igh t;

if ( Tl→Left= = NULL && Tl→Pixel= = CutPixel )

L=0;

else

{(1);

A.ddQueue ( Tl ) ;

}

if ( Tr→Left= = NULL && Tr→Pixel= = CutPixel )

R=0;

else

{(2)

A.ddQueue (T) ;

}(3)

}

}

还原算法

void Restore ( struct Node *TreeRoot )

{ TreeRoot= ( strut Node*)malloc ( sizeof (struct Node)

InitQueue ( );

A.ddQueue ( TreeRoot ) ;

C.utPixel= 1- GetCode ( ) ;

while ( ! EmptyQueue ( ) )

{ TrecNode= GetQueue ( Queue ) ;

NodeCode= GetCode ( ) ;

switch ( NodeCode )

{

case 0:

TreeNode→Left = NULL ;

TreeNode→Right= NULL

&

参考答案与解析:

相关试题

阅读以下说明和流程图,将应填入(n)处的字句写在对应栏内。[说明] 下面的流程图

[试题]阅读以下说明和流程图,将应填入(n)处的字句写在对应栏内。[说明]下面的流程图用于计算一个英文句子中最长单词的长度(即单词中字母个数)MAX。假设该英文句子中只含字母、空格和句点“.”,其中句点表示结尾,空格之间连续的字母串称为单词。[流程图]

  • 查看答案
  • 阅读以下说明和流程图,将应填入____处的字句写在答题纸的对应栏内。下面的流程图

    [案例分析题] 阅读以下说明和流程图,将应填入____处的字句写在答题纸的对应栏内。下面的流程图旨在统计指定关键词在某一篇文章中出现的次数。设这篇文章由字符A(0),…,A(n-1)依次组成,指定关键词由字符B(0),…,B(m-1)依次组成,其中n>m≥1。注意,关键词的各次出现不允许有交叉重叠。例如,在"aaaa"中只出现两次"aa"。该流程图采用的算法是:在字符串A中,从左到右寻找与字符串B相匹配的并且没有交叉重叠的所有

  • 查看答案
  • 阅读下列算法说明和流程图,将应填入(n)处的字句写在对应栏内。 (算法说明) 本

    [主观题]阅读下列算法说明和流程图,将应填入(n)处的字句写在对应栏内。(算法说明)本算法按照算符优先关系,实现对算术四则混合运算表达式(可含小括号)的求值。处理对象是以字符串形式给出的、语法正确且不含变量的整数表达式。算符优先关系见表5.1(§1,§2为按顺序出现的两个运算符)说明:“”是假设的表达式开始符和结束符,不可用。为实现算法,使用了两个堆栈分别寄存运算符和运算数(中间结果值)。算法基本思路如下:首先置操作数栈S1为空,表达式起始符“”设为运算符栈S2的栈底元素;依次读入表达式的各符号,若是数字

  • 查看答案
  • 阅读下列函数说明和C代码及流程图,将应填入(n)处的字句写在对应栏内 [说明]

    [主观题]阅读下列函数说明和C代码及流程图,将应填入(n)处的字句写在对应栏内[说明]分糖果问题是一个经典问题。问题描述如下:幼儿国有n(<20)个孩子围成一圈分糖果,老师先随机地发给每个孩子若干颗糖果,然后按以下规则调整:每个孩子同时将自己手中的糖果分一半给坐在他右边的小朋友;如共有8个孩子,则第1个将原来的一半分给第2个,第2个将原有的一半分给第3个……第8个将原来的一半分给第1个,这样的平分动作同时进行;若平分前,某个孩子手中的糖果是奇数颗,则必须从老师那里要一颗,使他的糖果变成偶数。小孩人数和每个

  • 查看答案
  • 阅读下列说明和流程图,将应填入(n)的语句写在对应栏内。 (流程图说明) 下面的

    [试题]阅读下列说明和流程图,将应填入(n)的语句写在对应栏内。(流程图说明)下面的流程(如图1所示)用N-S盒图形式描述了在一棵二叉树排序中查找元素的过程,节点有3个成员:data, left和right。其查找的方法是:首先与树的根节点的元素值进行比较:若相等则找到,返回此结点的地址;若要查找的元素小于根节点的元素值,则指针指向此结点的左子树,继续查找;若要查找的元素大于根节点的元素值,则指针指向此结点的右子树,继续查找。直到指针为空,表示此树中不存在所要查找的元素。(算法说明)(流程图)将上题的排序

  • 查看答案
  • 阅读下列说明和流程图,将应填入(n)处的语句写在对应栏内。(说明) 设学生(学生

    [试题]阅读下列说明和流程图,将应填入(n)处的语句写在对应栏内。(说明)设学生(学生数少于50人)某次考试的成绩按学号顺序逐行存放于某文件中,文件以单行句点“.”为结束符。下面的流程图用于读取该文件,并把全部成绩从高到低排序到数组B[50]中。(流程图)

  • 查看答案
  • 阅读以下说明和流程图8£­11,完成程序(n)处的语句写在对应栏内。 [说明]

    [主观题]阅读以下说明和流程图8-11,完成程序(n)处的语句写在对应栏内。[说明]对于数学上一个猜想:任何自然数平方的36倍等于两对孪生素数的和。初始的情形如下:12×36=(5+7)+(11+13)22×36=(29+31)+(41+43)32×36=(11+13)+(149+151)再往下,N取4,5,6,时,只要N不太大,也都可以找到N(上标)2×36等于两对孪生素数的和。但是当N是一个任意的正整数时,证明N2×36总是等于两对孪生素数的和,这还是一个目前尚未解决的问题。甚至当考察的数较大时,找出

  • 查看答案
  • 阅读下列算法说明和算法流程,将应填入(n)处的字句写在对应栏内。 (算法说明)

    [主观题]阅读下列算法说明和算法流程,将应填入(n)处的字句写在对应栏内。(算法说明)程序实现了常见的猜数字游戏。游戏开始时由程序自动产生一个1到100的随机数,接收用户输入,并给出提示信息,直至用户猜对。用户猜对后,显示猜测次数,并提供“重新开始”和“退出”功能。算法采用两层循环实现。外层循环采用do-while循环,由循环条件控制是否重新开始。内层采用for循环,用于判断用户的每次输入。m是随机产生的整数,键盘输入是字符串类型变量,n是整型变量。(问题1)内循环还需要一个变量,其作用为(1)。(问题2

  • 查看答案
  • 阅读下列说明和流程图,将应填入(n)处。[流程图说明] 流程图1£­1描述了一个

    [试题]阅读下列说明和流程图,将应填入(n)处。[流程图说明]流程图1-1描述了一个算法,该算法将给定的原字符串中的所有前导空白和尾部空白都删除,但保留非空字符之间的空白。例如,原字符串“ File Name ”,处理后变成“File Name”。流程图1-2、流程图1-3、流程图1-4分别详细描述了流程图1-1中的框A,B,C。假设原字符串中的各个字符依次存放在字符数组ch的各元素ch(1),ch(2),…,ch(n)中,字符常量KB表示空白字符。流程图1-1的处理过程是:先从头开始找出该字符串中的第一

  • 查看答案
  • 阅读以下说明和C£«£«程序,将应填入(n)处的字句写在对应栏内。[说明] 以下

    [试题]阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。[说明]以下程序的功能是统计学生成绩,包括输入学生的姓名和成绩,按成绩从高到低排列打印输出,对前百分之七十的学生定为合格(PASS),而后百分之三十的学生定为不合格(FAIL)。例如,当输入4名学生的姓名和成绩“Alice 67 Mary 90 Tom 56 John 88”后,程序的执行结果如下:姓名 成绩 合格否Mary 90 PASSJohn 88 PASSA.lice 67 FAILTom 56 FAIL[C++程序]inclu

  • 查看答案