阅读下列说明和C程序,将应填入 (n) 处的字句写在对应栏中。[说明]借助一个栈结构,可实现二叉树的非递归遍历算法。InOrderTraverse数实现中序非递归遍历,遍历过程如下:若不是空树,根节点入栈,进入左子树;若已经是空树,则栈顶元素出栈,访问该元素(根节点),进入该节点的右子树,继续直到遍历完成。函数中使用的预定义符号如下:typedef struct BiTNode{int data;struct BiTNode *iChiid,*rChiid;} BiTNode,*BiTree;typedef struct SNode{/*链栈的节点类型*/BiTree elem;struct SNode *next;}SNode;[函数]int InOrderTraverse(BiTree root){BiTree P;SNode *q,*stop=NULL;/*不带头节点的单链表作为栈的存储结构*/P=root;while(p !=NULL || stop !=NULL){if( (1) ){ /*不是空树*/q=(SNode*)malloc(sizeof q);if(q==NULL)return-1;/*根节点指针入栈*/(2) ;q->elem=P;stop=q;P= (3) ; /*进入根的左子树*/}else{q=stop;(4) ; /*栈顶元素出栈*/printf("%d|,q->elem->data); /*防问根节点*/P= (5) ; /*进入根的右子树*/free(q); /*释放原栈顶元素*/}/*if*/}/*while*/return 0;}/*InOrderTraverse*/ (4)处填()。
查看答案
阅读下列函数说明和C++代码,将应填入 (n) 处的字句写在对应栏内。[说明]在一些大型系统中,大多数的功能在初始化时要花费很多时间,如果在启动的时候,所有功能(包括不用的功能)都要全面初始化的话,会导致应用软件要花很多时间才能启动。因此常将程序设计成到了实际要使用某种功能的阶段才初始化该功能。以下示例展示了Proxy(代理)模式,PrinterProxy类执行一些比较“轻”的方法,需要真正执行“重”的方法时才初始化Print类。图5-1显示了各个类间的关系。[图5-1][C++代码]class Printable{public:virtual void setPrinterName(string name)=0;virtual string getprinterName()=0;virtual void print(string name)=0;};class Printer:public Printable{private:string name;public:Printer(string name){cout<<"正在产生Printer的对象实例"<<endl;this->name=name;}void setPrinterName(string name){this->name=name;}string getPrinterName(){return name;}void print(string msg){cout<<"======="<<name<<"==========="<<endl;cout<<msg<<endl;}};class printerproxy :public (1) {private:String name;Printer *real;public:PrinterProxy(string name){(2) =NULL;this->name=name;}void setPrinterName(string name){if( (3) )real->setPrinterName(name);this->name=name;}string getPrinterName(){return name;}void print(string msg){(4) ;real->print(msg);}void realize(){if(real==NULL)real= (5) ;}}; (3)处填()。
阅读下列函数说明和C++代码,将应填入 (n) 处的字句写在对应栏内。[说明]在一些大型系统中,大多数的功能在初始化时要花费很多时间,如果在启动的时候,所有功能(包括不用的功能)都要全面初始化的话,会导致应用软件要花很多时间才能启动。因此常将程序设计成到了实际要使用某种功能的阶段才初始化该功能。以下示例展示了Proxy(代理)模式,PrinterProxy类执行一些比较“轻”的方法,需要真正执行“重”的方法时才初始化Print类。图5-1显示了各个类间的关系。[图5-1][C++代码]class Printable{public:virtual void setPrinterName(string name)=0;virtual string getprinterName()=0;virtual void print(string name)=0;};class Printer:public Printable{private:string name;public:Printer(string name){cout<<"正在产生Printer的对象实例"<<endl;this->name=name;}void setPrinterName(string name){this->name=name;}string getPrinterName(){return name;}void print(string msg){cout<<"======="<<name<<"==========="<<endl;cout<<msg<<endl;}};class printerproxy :public (1) {private:String name;Printer *real;public:PrinterProxy(string name){(2) =NULL;this->name=name;}void setPrinterName(string name){if( (3) )real->setPrinterName(name);this->name=name;}string getPrinterName(){return name;}void print(string msg){(4) ;real->print(msg);}void realize(){if(real==NULL)real= (5) ;}}; (4)处填()。
阅读下列函数说明和C++代码,将应填入 (n) 处的字句写在对应栏内。[说明]在一些大型系统中,大多数的功能在初始化时要花费很多时间,如果在启动的时候,所有功能(包括不用的功能)都要全面初始化的话,会导致应用软件要花很多时间才能启动。因此常将程序设计成到了实际要使用某种功能的阶段才初始化该功能。以下示例展示了Proxy(代理)模式,PrinterProxy类执行一些比较“轻”的方法,需要真正执行“重”的方法时才初始化Print类。图5-1显示了各个类间的关系。[图5-1][C++代码]class Printable{public:virtual void setPrinterName(string name)=0;virtual string getprinterName()=0;virtual void print(string name)=0;};class Printer:public Printable{private:string name;public:Printer(string name){cout<<"正在产生Printer的对象实例"<<endl;this->name=name;}void setPrinterName(string name){this->name=name;}string getPrinterName(){return name;}void print(string msg){cout<<"======="<<name<<"==========="<<endl;cout<<msg<<endl;}};class printerproxy :public (1) {private:String name;Printer *real;public:PrinterProxy(string name){(2) =NULL;this->name=name;}void setPrinterName(string name){if( (3) )real->setPrinterName(name);this->name=name;}string getPrinterName(){return name;}void print(string msg){(4) ;real->print(msg);}void realize(){if(real==NULL)real= (5) ;}}; (2)处填()。
阅读以下说明和Java代码,将应填入 (n) 处的字句写在对应栏内。[说明]在一些大型系统中,大多数的功能在初始化时要花费很多时间,如果在启动的时候,所有功能(连不用的功能)都要全面初始化的话,会连带影响到应用软件要花很多时间才能启动。因此常将程序设计成到了实际要使用某种功能的阶段才初始化该功能。以下示例展示了Proxy(代理)模式,PrinterProxy类执行一些比较“轻”的方法——设置名称和取得名称,需要真正执行“重”的方法——真正打印——时才初始Print类。图6-1显示了各个类间的关系。[图6-1][Java代码]//Printable.JavapubliC (1) Printable{public abstract void setPrinterName(String name);public abstract String getprinterName();public abstract void print(String string);}//Printer.Javapublic class Printer implements Printable{private String name;public Printer(){System.out.println("正在产生Printer的对象实例");}public Printer(String name){this.name=name;heavyJob("正在产生Printer的对象实例("+name+")");public void setPrinterName(String name){this.name=name;public String getPrinterName(){return name;public void print(String string){System.out.println("===" +name+" ====");System.out.println(string);}}//PrinterProxy.Javapublic class PrinterProxy (2) Printable{private String name;private Printer real;public PrinterProxy(){}public PrinterProxy(String name){this.name=name;}public gynchronized void setPrinterName(String name){if( (3) ){real.setPrinterName(name);}this.name=name;}public String getprinterName(){return name;}public void print(String string){(4) ;real.print(string);}private synchronized void realize(){//产生真正的Printer对象if(real==null){real= (5) ;}}} (5)处填()。