问答题
【问题1】
对文法G进行改写,然后对每个非终结符写出不带回溯的递归于程序。
【参考答案】
改写文法为:
(O)S→α;(A)S→∧;(B)S→(T);(C)T→SN;(D)N→,SN;(E)N→ε......
(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
点击查看答案
<上一题
目录
下一题>
热门
试题
问答题
[预备知识] ①对给定的字符集合及相应的权值,采用哈夫曼算法构造最优二叉树,并用结构数组存储最优二叉树。例如,给定字符集合a,b,c,d及其权值2、7、4、5,可构造如图3所示的最优二叉树和相应的结构数组Ht(数组元素Ht[0]不用)(见表5)。结构数组HT的类型定义如下:#define MAXLEAFNUM 20struct node char ch; * 当前结点表示的字符,对于非叶子结点,此域不用* int weight; * 当前结点的权值* int parent; * 当前结点的父结点的下标,为0时表示无父结点* int Ichild, rchild *当前结点的左、右孩子结点的下标,为0时表示无对应的孩子结点* Ht[2 * MAXLEAFNUM]; ②用’0’或’1’标识最优二叉树中分支的规则是:从一个结点进入其左(右)孩子结点,就用’0’(’1’)标识该分支(示例如图3所示)。 ③若用上述规则标识最优二叉树的每条分支后,从根结点开始到叶子结点为止,按经过分支的次序,将相应标识依次排列,可得到由’0’、’1’组成的一个序列,称此序列为该叶子结点的前缀编码。如图3所示的叶子结点a、b、c、d的前缀编码分别是110、0、111、10。 【函数5.1说明】 函数void LeafCode (int root, int n)的功能是:采用非递归方法,遍历最优二叉树的全部叶子结点,为所有的叶子结点构造前缀编码。其中形参root为最优二叉树的根结点下标;形参 n为叶子结点个数。 在构造过程中,将Ht[p]. weight域用作被遍历结点的遍历状态标志。 【函数5.1】 char * * Hc;void LeafCode (int root, int n) *为最优二叉树中的n个叶子结点构造前缀编码,root是树的根结点下标* int i,p = root,cdlen =0;char code[20]; Hc=(char* * )malloc(.(n +]) *sizeof(char* )); * 申请字符指针数组* for(i=1;i< =p;++i) Ht[ i]. weight =0; * 遍历最优二叉树时用作被遍历结点的状态标志* while(p) *以非递归方法遍历最优二叉树,求树中每个叶子结点的编码* if(Ht[p], weight ==0) *向左* Ht[ p]. weight =1 if (Ht[p],lchild !=0) p=Ht[P].lchild; code[cdlen++] =’0’;] else if (Ht[p]. rchild ==0) * 若是叶子结点,则保存其前缀编码* Hc[p] = ( char * ) malloc( (cdlen + 1 ) * sizeof (char) ); (1) ; strcpy(He[ p] ,code); else if (Ht[ pi, weight == 1) *向右* Ht[p]. weight =2; if(Ht[p].rchild !=0) p=Ht[p].rchild; code[cdlen++] =’1’; else * Ht[p]. weight ==2,回退* Ht[p]. weight =0; p= (2) ; (3) ; *退回父结点* * while结束* 【函数5.2说明】 函数void Decode(char*buff, int root)的功能是:将前缀编码序列翻译成叶子结点的字符序列并输出。其中形参root为最优二叉树的根结点下标;形参buff指向前缀编码序列。 【函数5.2】 void Decode( char * buff, int root) Iint pre =root,p; while ( * buff! = ’ 0’) p = root; while (p!=0) *存在下标为p的结点* pre=p; if( (4) )p=Ht[p].lchild; *进入左子树* else p = Ht[p]. rchild; *进入右子树*. buff ++; * 指向前缀编码序列的下一个字符* (5) ; printf( %c , Ht [ pre]. ch);
点击查看答案&解析
问答题
[说明] 下面是一个Appkt程序,其功能是从3~100之间(包括3和100)每隔0.5秒显示一个新的数字,如果数字为素数,则显示为灰色,其他为绿色。 程序运行结果如图4所示。 import java. awt. * import java. applet. Applet < applet code = ex2_7, class width = 800 height = 400 > < applet > public class ex2_7 extends Applet public Color color2_7 = Color. black; private iht n2_7 = 3; public myPrime thPrime2_7; public void init( ) thPrime2_7 = new myPrime(this); thPrime2_7, start( ); public void paint(Graphics g) g, setColor( color2_7 ); g. drawString( (1) ,50,50); public int getlnt( ) return n2_7; public void setlnt (int i) n2_7 = i; class myPrime extends Thread I ex2_7 obj2_7; myPrime (ex2_7 o) this. obj2_7 = o; public boolean isPrime(int n)boolean bPrime = true;iht i =2; if( (2) ) return false; while( i < n - ]&&bPrime) if( (3) ) bPrime = false; i++; return bPrime; public void run( ) int i; for (i = 3; (4) ;i++) if (isPrime(i) ) obj2 _7, color2_7 = Color, gray; else obj2_7, color2_7 = Color. green; (5) ; obj2_7, repaint( ); try sleep(S00); catch (InterruptedException ie) ex2_7, html< HTML > < HEAD > <TITLE > ex2_7 < TITLE > < HEAD > < BODY > <appletcode = ex2_, class width =800 height =400 > < applet > < BODY >< HTML >
点击查看答案&解析
相关试题
[说明] ①为类Circle增加一个构造函数,...