●试题三阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明3.1】假设以带头结点的单循环链表作非递减有序线性表的存储结构。函数deleteklist(LinkList head)的功能是删除表中所有数值相同的多余元素,并释放结点空间。例如:链表初始元素为:(7,10,10,21,30,42,42,42,51,70)经算法操作后变为:(7,10,21,30,42,51,70)【函数3.1】void deleteklist(LinkList head){LinkNode*p,*q;p

题目

●试题三

阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明3.1】

假设以带头结点的单循环链表作非递减有序线性表的存储结构。函数deleteklist(LinkList head)的功能是删除表中所有数值相同的多余元素,并释放结点空间。

例如:链表初始元素为:

(7,10,10,21,30,42,42,42,51,70)

经算法操作后变为:

(7,10,21,30,42,51,70)

【函数3.1】

void deleteklist(LinkList head)

{

LinkNode*p,*q;

p=head->next;

while(p!=head)

{

q=p->next;

while( (1) )

{

(2) ;

free(q);

q=p->next;

}

p=p->next;

}

}

【说明3.2】

已知一棵完全二叉树存放于一个一维数组T[n]中,T[n]中存放的是各结点的值。下面的程序的功能是:从T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。

【函数3.2】

#include<istream.h>

typedef struct node {

int data;

stuct node leftChild,rightchild;

}BintreeNode;

typedef BintreeNode*BinaryTree;

void ConstrncTree(int T[],int n,int i,BintreeNode*&ptr)

{

if(i>=n) (3) ;∥置根指针为空

else

{

ptr=-(BTNode*)malloc(sizeof(BTNode))

ptr->data=T[i];

ConstrucTree(T,n,2*i+1, (4) );

ConstrucTree(T,n, (5) ,ptr->rightchild);

}

}

main(void)

{/*根据顺序存储结构建立二叉链表*/

Binarytree bitree;int n;

printf("please enter the number of node:\n%s";n);

int*A=(int*)malloc(n*sizeof(int));

for(int i=0;i<n;i++)scanf("%d,A+i);/*从键盘输入结点值*/

for(int i=0;i<n;i++)printf("%d",A[i]);

ConstructTree(A,n,0,bitree);

}


相似考题
参考答案和解析
正确答案:

●试题三

【答案】(1)q!=head &&q->data==p->data(2)p->next=q->next(3)ptr=NULL

(4)ptr->leftchild(5)2*i+2

【解析】这一题共有两个程序,第一个函数是考查链表操作,第二个程序是使用递归法创建链式存储的二叉树。

先看第一个函数。这个函数由于while循环实现对链表的遍历,在这个while循环中又嵌套着一个while循环,内循环实现了删除相同元素的功能。由说明和程序可知,p指针指向当前遍历结点,q指向当前结点的后继结点,如果这两个结点的数据域相等,则将其删除。这个循环何时结束呢?显然,当个结点的数据域不相等时要结束,或者当q指向链表头结时,整个链表已经遍历完了也要结束,因此(1)空处应填写"q!=head && q->data==p->data"或其等价形式。如果指针p和指针q所指的结点的数据域相等,则要将指针q所指的结点删除,从内存中释放空间必须要使指针q所指的结点的后继结点接到指针p所指的结点后,因此(2)空处应填写"p->next=q->next"。

再来分析第二个程序。该程序由两个函数组成,函数main()实现数据输入,函数ConstrucTree(int T[],int n,int I,BintreeNode *&ptr)用于建立二叉链表。根据(3)空所在语句的注释,很容易填写。当i>=n时,就说明二叉树不存这个结点,即将根指针置空,因此(3)空应填写"ptr=NULL"。当i<n时,先生成一个结点,将数组T[]第i个元素数据填入该结点,建立结点的左子树和右子树。根据完全二叉树的顺序存储的定义,可以第i个元素左子树根结点为2*i+1,右子树的根结点为2*i+2。因此第一条递归调用是建立左子树,第二条递归调用是建立右子树。因此(4)空应填写"ptr->leftchild",(5)空应填写"2*i+2"。

 

更多“●试题三 阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明3.1】 假设 ”相关问题
  • 第1题:

    图2-1是基于软交换的网络分层模型。请将选项应填入(n)处的字句写在答题纸对应的解答栏内。


    正确答案:
    (1)业务/应用层
    (2)控制层
    (3)接入层
    (4)媒体网关

  • 第2题:

    阅读下列说明和C++-代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 某发票(lnvoice)由抬头(Head)部分、正文部分和脚注(Foot)部分构成。现采用装饰(Decorator)模式实现打印发票的功能,得到如图5-1所示的类图。

    【C++代码】 #include using namespace std; class invoice{ public: (1){ cout<<"This is the content of the invoice!"<

    答案:
    解析:
    (1) virtual void printInvoice() (2) ticket->printInvoice() (3) Decorator::printInvoice() (4) Decorator::printInvoice() (5) &a
    【解析】

    试题分析
    1.Invoice类下,义虛函数,按类图,函数名是printInvoice
    2.前面定义对象名是ticket,那么在ticket不为空的时候调用函数printInvoice
    3.这部分填写发票的抬头,看类图应该实现函数printInvoice ,Decorator装饰模式使用该方法
    4.这部分是发票的脚注,看类图应该实现函数printlnvoice,Decorator装饰模式使用该方法
    5.FootDecorator a(NULL) ;脚步的装饰参数是a,调用a参数,

  • 第3题:

    阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】 某文件管理系统中定义了类OfficeDoc和DocExplorer,当类OfficeDoc发生变化时,类DocExplorer的所有对象都要更新其自身的状态,现采用观察者(Observer)设计模式来实现该需求,所设计的类图如图6-1所示。



    答案:
    解析:
    1: void update()2: Observer3: obs.update()4: Subject5: Attach(this)

  • 第4题:

    (a)智能网概念模型中分布功能平面模型如下图所示,请根据此图将应填入(n)处的 字句写在答题纸的对应栏内。


    正确答案:
    (1)SMF(或业务管理功能)
    (2)SCEF(或业务生成功能)
    (3)SDF(或业务数据功能)
    (4)SCF(或业务控制功能)
    (5)SSF(或业务交换功能)
    (6)CCF(或呼叫控制功能)

  • 第5题:

    阅读下列说明和C++代码,回答问题,将解答填入答题纸的对应栏内。
    【说明】某航空公司的会员积分系统将其会员划分为:普卡 (Basic)、银卡(Silver)和金卡 (Gold) 三个等级。非会员 (NonMember) 可以申请成为普卡会员。会员的等级根据其一年内累积 的里程数进行调整。描述会员等级调整的状态图如图 5-1 所示。现采用状态 (State) 模式实现上述场景,得到如图 5-2 所示的类图。




    【问题1】(15分)阅读上述说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。


    答案:
    解析:
    注意:原版的题目应该是Cbasic、CSilve。(1) virtual double travel(int miles,FrequentFlyer* context)=0(2)context->setState(context->Cbasic)(3)context->setState(context->CSilve)(4)context->setState(context->Cbasic)(5)context->setState(context->CSilve)

  • 第6题:

    阅读下列说明和?C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
    【说明】
    阅读下列说明和?Java代码,将应填入?(n)?处的字句写在答题纸的对应栏内。
    【说明】
    某快餐厅主要制作并出售儿童套餐,一般包括主餐(各类比萨)、饮料和玩具,其餐品种
    类可能不同,但其制作过程相同。前台服务员?(Waiter)?调度厨师制作套餐。现采用生成器?(Builder)?模式实现制作过程,得到如图?6-1?所示的类图。






    答案:
    解析: