下面的算法是计算不带节点的单链表长度,其中能正确执行的是______。A.Function Length(L:Link) integer begin p:=L; j:=0; while p↑.next≠NIL DO [p:=p↑.next; j:=j+1 ] return(j) end;B.Function Length(L:Link) integer begin p:=L; k:=0; while p≠NIL DO [p:=p↑.next; k:=k+1) return(k) end;C.Functio

题目

下面的算法是计算不带节点的单链表长度,其中能正确执行的是______。

A.Function Length(L:Link) integer begin p:=L; j:=0; while p↑.next≠NIL DO [p:=p↑.next; j:=j+1 ] return(j) end;

B.Function Length(L:Link) integer begin p:=L; k:=0; while p≠NIL DO [p:=p↑.next; k:=k+1) return(k) end;

C.Function Length(L:Link)integer begin p:=L;k:=0; repeat k:=k+1; p=p↑.next until p=NIL return(k-1) end;

D.Function Length(L:Link)integer begin p:=L↑.next; k:=1; while p≠NIL DO [k:=k+1; p:=p↑.next] return(k) end;


相似考题
参考答案和解析
正确答案:B
更多“下面的算法是计算不带节点的单链表长度,其中能正确执行的是______。A.Function Length(L:Link) integer begin p:=L; j:=0; while p↑.next≠NIL DO [p:=p↑.next; j:=j+1 ] return(j) end;B.Function Length(L:Link) integer begin p:=L; k:=0; while p≠NIL DO [p:=p↑.next; k:=k+1) return(k) end;C.Functio”相关问题
  • 第1题:

    已知bead指向一个带头结点的单向链表,链表中每个结点包含数据域(data)和指针域(next),数据域为整型。以下函数求出链表中所有连接点数据域的和值作为函数值返回。请在横线处填入正确内容。

    { int data; struct link *next;}

    main()

    { struct link *head;

    sam(______);

    {stmct link *p;int s=0;

    p=head->next;

    while(p){s+=p->data;p=p->next;}

    return(s);}


    正确答案:

  • 第2题:

    阅读下列程序说明和C++代码,将应填入(n)处。

    【程序6说明】

    本程序实现两个多项式的乘积运算。多项式的每一项由类Item描述,而多项式由类List描述。类List的成员函数有:

    createList():创建按指数降序链接的多项式链表,以表示多项式。

    reverseList():将多项式链表的表元链接顺序颠倒。

    multiplyList(List L1,List L2):计算多项式L1和多项式L2的乘积多项式。

    【程序6】

    include<iostream.h>

    class List;

    class |tem{

    friend class List;

    private:

    double quot;

    int exp;

    |tem * next;

    public:

    |tem(double_quot,int_exp)

    { (1) ;}

    };

    class List {

    private:

    |tem * list;

    public:

    List(){list=NULL;}

    void reverseList();

    void multiplyList(List L1,List L2);

    void createList();

    };

    void List::createList()

    { |tem * p,* u,*pre;

    int exp;

    doubte quot;

    list=NULL;

    while(1){

    cout<<"输入多项式中的一项(系数、指数):"<<endl;

    cin>>quot>>exp:

    if(exp<0)break; //指数小于零,结束输入

    if(quot==0)continue;

    p=list;

    while((2)){ //查找插入点

    pre=p;p=p->next;}

    if(p!=NULL&&exp==p->exp) {p->quot+=quot;continue;}

    u=(3);

    if(p==list) list=u;

    else pre->next=u;

    u->next=p;}

    }

    void List::reverseList()

    { |tem*p,*u;

    if(list==NULL)return;

    p=list->next;list->next=NULL;

    while(p!=NULL)}

    u=p->next;p->next=list;

    list=p;p=u;}

    }

    void List::multiplyList(List L1,List L2)

    {|tem*pLI,*pL2,*u;

    int k,maxExp;

    double quot;

    maxExp=(4);

    L2.reverseList();list=NULL;

    for(k=maxExp;k>=0;k--){

    pL1=L1.list;

    while(pL1!=NULL&&pL1->exp>k)pL1=pL1->next;

    pL2=L2.list;

    while(pL2!=NULL&&(5) pL2=pL2->next;

    quot=0.0;

    while(pL1!=NULL&&pL2!=NULL){

    if(pL1->exp+pL2->exp==k){

    (6);

    pL1=pL1->next;pL2=pL2->next;

    }else if(pL1->exp+pL2->exp>k) pL1=pL1->next;

    else pL2=pL2->next;

    }

    if(quot!=0.0){

    u=new |tem(quot,k);

    u->next=list;list=u;}

    }

    reverseList(:);L2.reverseList():

    }

    void main()

    { ListL1,L2,L;

    cout<<"创建第一个多项式链表\n";L1.createList();

    cout<<"创建第二个多项式链表\n";L2.createList();

    L.multiplyList(L1,L2);

    }


    正确答案:(1)quot=_quot;exp=_exp;next=NULL; (2)p!=NULL && exp p-> exp (3)new Item(quotexp) (4)L1.1ist->exp+L2.list->exp (5)pL1-> exp +pL2 -> exp k (6)qnot+=pL1->quot*pL2->quot
    (1)quot=_quot;exp=_exp;next=NULL; (2)p!=NULL && exp p-> exp (3)new Item(quot,exp) (4)L1.1ist->exp+L2.list->exp (5)pL1-> exp +pL2 -> exp k (6)qnot+=pL1->quot*pL2->quot 解析:程序主要由类Item和List组成,其中类Item定义多项式中的项,由三个私有成员组成分别是:系数quot、指数exp和指向多项式的下一项的指针next,该类定义了一个构造函数,其作用是创建系数为 _quot、指数为_exp的项,即创建类Item的一个对象,因此(1)处应该填“quot=_quot;exp=_exp;next=NULL”。类List定义了多项式的操作,数据成员list是多项式链表的链头指针,类成员函数creatlist()的功能是创建按照指数降序链接的多项式,创建的方法是不断将新的项插入到链表的合适位置上。若链表中存在一项p,其指数大于待插入项的指数,则待查入项为p的前驱。该成员函数在链表上遍历,直到找到满足上述条件的项;若链表中不存在这样的项,那么待插入项称为新的链尾。因此(2)处应填“p!=NULL && expp->exp”;(3)处应填“new I- tem(quot,exp)”,根据读入的指数和系数创建要插入的项。若链表中存在指数与待插入项指数相等的项则合并同类项。
    成员函数multiplyList (List L1,List L2)计算多项式L1和12的乘积。首先计算了L1和翅的乘积多项式的最高幂次,即多项式L1和 U的最高此项的指数之和。由于多项式L1和12是按照指数的降序排列的,两个多项式的第一项分别是最高幂项,这两项的指数之和就是乘积多项式的最高次幂,因此(4)处填“L1.list->exp+L2.list->exp”。
    为了实现系数的乘积求和计算,当多项式L1从幂次高至幂次低逐一考虑各项的系数时,多项式L2应从幂次低至幂次高的顺序考虑各项的系数,以便将两多项式所有幂次和为k的两项系数相乘后累计。由于是单链表,所以成员函数先将其中多项式L2的链接顺序颠倒,计算完成之后,再将多项式12的链接顺序颠倒,即恢复原来的链接顺序。乘积多项式从高次幂系数至0次幂系数的顺序逐一计算。
    为求k次幂这一项的系数,对于L1的考查顺序是从高次幂项至最低次幂项,而对于L2的考查相反。首先跳过多项式L1中高于k次幂的项,设低于k次幂的项最高次幂是j次幂;对于多项式L2,跳过低于 k-j次幂的项,因此(5)处应该填“pL1->exp+pL2->expk”。
    考虑多项式L1和L2剩余各项的循环,若两多项式的当前项幂次和为k,则累计他们系数的乘积,并分别准备考虑下一项,因此(6)处应该填“quot+=pL1->quot*pL2->quot”;若两多项式的当前幂次和大于k,则应考虑幂次和更小的项,这样应该准备考虑多项式L1的下一项;若两多项式的当前幂次和小于k,则应考虑幂次和更大的项,这样应该准备考虑多项式L2的下一项。若所有幂次和为k的项的系数乘积之和不等于0,则应该在乘积多项式中有这一项,生成这一项的新结点,并将它插在乘积多项式的末尾。

  • 第3题:

    有以下程序: include usingnamespacestd; intmain() { intnum[2][3],*p; intt,i,j,k=

    有以下程序: #include <iostream> using namespace std; int main() { int num[2][3],*p; int t,i,j,k=10; p=num[0]; for(i=0;i<2;i++) { for(j=0;j<3;j++) { k++; *p=k; for(t=2;t<*p;t++) { if(!(*p%t)) { j--; *p--; break; } *p++; } } cout<<*(p-1)<<end1; return 0; } 程序运行后的输出结果是( )。

    A.19

    B.11

    C.29

    D.23


    正确答案:C
    解析:本题考核数组与指针的关系。程序首先初始化指针p,让其指向二维数组num的首元素,即num[0][0]。程序中,第1个for循环是为二维数组的每行元素赋值而设置的循环,第2个for循环是为二维数组的每列元素赋值而设定的,第3个for循环是为判断数组元素是否是素数而设置的。在第3个for循环中,如果*p的值能被小于它的数整除(即不是素数),则执行“j--;*p--;”,然后跳出第3个for循环。j--的含义是让其前面的赋值语句重新赋值,而*p--的含义是使指针指向前一个单元。语句“*p++;”将指针移到下一个单元,在下一次循环时,k加1,并k赋给*p,看*p是否为素数,这样一直到满足条件为止,即数组num[2][3]中的数都为素数。最后数组num中各元素的值分别为大于10的素数,即分别为:11,13;17,19,23,29。程序最后要求输出*p的值,由于此时指针已指向数组num的最后一个元素,即num[1][2]。所以输出的值是29。

  • 第4题:

    有如下程序段#include "stdio.h"typedef struct aa{ int a; struct aa *next;} M;void set(M *k,int i,int *b){ int j,d=0; for(j=1;j<i;j++) { k[j-1].next=&k[j]; k[j-1].a=b[d++]; } k[j].a=b[d];}main(){ M k[5],*p; int d[5]={23,34,45,56,67}; set(k,5,d); p=k+1; printf("%d\n",________);}要输出45,则在下画线处应填入的选项是A.p->next->a B.++p->aC.(*p).a++ D.p++ ->a


    正确答案:A
    在本题中,程序首先定义了一个结构体,结构体中有两个成员变量,一个是整型,另一个是指向该结构体的指针。然后程序定义了一无返回值的函数set,该函数带有三个参数,第一个是结构体指针变量k,第二个是整型变量i,第三个是整型指针变量b。在函数体中,首先定义了两个整型变量,然后执行for循环,从循环变量的初始值及循环结束条件我们可以知道,循环执行的次数与形参变量i有关,从循环体中我们可以看出,该循环是将结构体数组中的前一个结构体的指针成员指向后一个结构体的首地址,并用数组b中的值给结构体的成员变量a赋值。
    在主函数中,定义了一个大小为5的结构体数组k和一个结构体指针p,然后定义了一个数组d,并给数组d进行了初始化操作,然后调用函数set,实参分别为结构体数组k、5和数组d,结合上面我们对set函数的分析可以知道,此时执行set的for循环,可以是结构体数组中各结构体变量的指针成员next指向下一个结构体变量,并将该结构体变量的成员a赋值为数组d的与之位置相对应的值,如结构体数组中第一个结构体变量的a被赋值为数组d中的第一个元素值,即23。那么函数调用后,结构体数组各元素的成员a的值分别为23、34、45、56、67。
    函数调用后,运行p=k+1;语句,该语句的作用是使结构体指针变量p执行结构体数组k的第二个元素,然后执行输出语句,本题要填的空就在输出语句中,根据题目要求,要输出一个45的值,当然,用数组d输出这么一个结果很简单,为d[2],但选项中并没有这项,而是需要我们从结构体数组中输出这个值,从上面的分析我们知道,该值对应结构体数组第三个元素的成员,而当前的p执行第二个元素,从四个选项来分析,只有A选项能完成输出45的任务。
    B选项中的++p->a由于运算符优先级问题,首先运行p->a,输出的是34,然后加1,即输出35。
    C选项中的(*p).a++等于((*p).a)++,这样的结果是34++,最后的输出结果是34。
    D选项中的p++ ->a等价于(p++)->a,显然是输出第二个结构体的a成员值,即34。

  • 第5题:

    有以下程序includemain(){int*p,j; p=NULL p=fun(); for(j=0;j<4;j+){printf("%d",*p)

    有以下程序 #include<stdio.h> main() { int *p,j; p=NULL p=fun(); for(j=0;j<4;j+){printf("%d",*p);p++;} } int*fun() { int a[4],k; for(k=0;k<4;k++)a[k]=k; return(A) ; } 程序运行后的输出结果是( )

    A.程序有错不能运行

    B.输出4个NULL

    C.输出0 1 2 3

    D.输出1 1 1 1


    正确答案:A

  • 第6题:

    以下程序的输出结果是( )。 Option Base 1 Private Sub Command1 Click() Dim a(10),p(3)as Integer k=5 For I=1 to 10 a(i)=I Next I For j=1 to 3 p(i)=a(I*j) Next j For I=1 to 3 k=k+p(I)*2 Next I Print k End Sub

    A.33

    B.28

    C.35

    D.37


    正确答案:A
    解析:此题中共定义了两个数组:a(i),p(i),共用到了3次For循环。第1个For语句对数组a(i)赋值,a(1)…a(10)=1…10;第2个For语句,对p(1)=1,p(2)=4,p(3)=9;第3个For语句,计算k的值,3次循环分别得到:5,15, 33。答案为A。

  • 第7题:

    函数实现单链表的插入算法,请在空格处将算法补充完整。int ListInsert(LinkList L,int i,ElemType e){ LNode *p,*s;int j; p=L;j=0; while((p!=NULL)&&(jnext;j++; } if(p==NULL||j>i-1) return ERROR; s=(LNode *)malloc(sizeof(LNode)); s->data=e; (1) ; (2) ; return OK;}/*ListInsert*/


    正确答案:(1)s->next=p->next (2)p->next=s

  • 第8题:

    函数GetElem实现返回单链表的第i个元素,请在空格处将算法补充完整。 int GetElem(LinkList L,int i,Elemtype *e){ LinkList p;int j;p=L->next;j=1; while(p&&ji) return ERROR;*e= (2) ;return OK;}


    正确答案:(1)p=p->next (2)p->data

  • 第9题:

    写出算法的功能。int L(head){ node * head; int n=0; node *p; p=head; while(p!=NULL) { p=p->next; n++; } return(n); }


    正确答案:求单链表head的长度

  • 第10题:

    函数实现单链表的删除算法,请在空格处将算法补充完整。int ListDelete(LinkList L,int i,ElemType *s){ LNode *p,*q; int j; p=L;j=0; while(( (1) )&&(jnext;j++; } if(p->next==NULL||j>i-1) return ERROR; q=p->next; (2) ; *s=q->data; free(q); return OK;}/*listDelete*/


    正确答案:(1)p->next!=NULL (2)p->next=q->next

  • 第11题:

    填空题
    函数实现单链表的插入算法,请在空格处将算法补充完整。int ListInsert(LinkList L,int i,ElemType e){ LNode *p,*s;int j; p=L;j=0; while((p!=NULL)&&(jnext;j++; } if(p==NULL||j>i-1) return ERROR; s=(LNode *)malloc(sizeof(LNode)); s->data=e; (1) ; (2) ; return OK;}/*ListInsert*/

    正确答案: (1)s->next=p->next (2)p->next=s
    解析: 暂无解析

  • 第12题:

    填空题
    函数GetElem实现返回单链表的第i个元素,请在空格处将算法补充完整。 int GetElem(LinkList L,int i,Elemtype *e){ LinkList p;int j;p=L->next;j=1; while(p&&ji) return ERROR;*e= (2) ;return OK;}

    正确答案: (1)p=p->next (2)p->data
    解析: 暂无解析

  • 第13题:

    阅读以下应用说明、图和C++程序,将C++程序中(1)~(6)空缺处的语句填写完整。

    【说明】

    以下【C++程序】用于实现两个多项式的乘积运算。多项式的每一项由类Item描述,而多项式由类List描述。类List的成员函数主要有:

    createList():创建按指数降序链接的多项式链表,以表示多项式:

    reverseList():将多项式链表的表元链接顺序颠倒:

    multiplyList(ListL1,ListL2)计算多项式L1和多项式L2的乘积多项式。

    【C++程序】

    include <iostream.h>

    class List;

    class Item {

    friend class List;

    private:

    double quot ;

    int exp ;

    Item *next;

    Public:

    Item(double_quot,int_exp)

    { (1) ;}

    };

    class List{

    private:

    Item *list;

    Public:

    List(){

    list=NULL:

    }

    void reverseList();

    void multiplyList(List L1,List L2);

    void createList();

    };

    void List::createList()

    { Item *p,*U,*pre;

    int exp;

    double quot;

    list = NULL;

    while (1) {

    cout << "输入多项式中的一项(系数、指数) :" << endl;

    cin >> quot >> exp:

    if ( exp<0 )

    break ; //指数小于零,结束输入

    if ( quot=0 )

    continue;

    p = list;

    while ( (2) ) { //查找插入点

    pre = p;

    p = p->next;

    }

    if ( p != NULL && exp = p->exp ) {

    p->quot += quot;

    continue ;

    }

    u =(3);

    if (p == list)

    list = u;

    else

    pre->next = u;

    u ->next = p;

    }

    }

    void List::reverseList()

    { Item *p, *u;

    if ( list==NULL )

    return;

    p = list ->next;

    list -> next = NULL;

    while ( p != NULL) {

    u = p -> next;

    p ->next = list;

    list = p;

    p = u;

    }

    }

    void List::multiplyList ( List L1, List L2 )

    { Item *pL1,*pL2,*u;

    int k, maxExp;

    double quot;

    maxExp =(4):

    L2.reverseList();

    list=NULL;

    for ( k = maxExp;k >= 0;k-- ){

    pL1 = L1.list;

    while ( pL1 != NULL && pL1 -> exp > k )

    pL1 = pL1 ->next;

    pL2 = L2.1ist;

    while (pL2 NULL &&(5))

    pL2 = pL2 -> next;

    quot = 0.0;

    while (pL1 != NULL && pL2 != NULL){

    if(pL1->exp+pL2->exp==k) {

    (6)

    pL1 = pL1 -> next;

    pL2 = pL2 -> next;

    } else if ( pL1 -> exp + pL2 -> exp > k )

    pL1 = pL1 -> next;

    else

    pL2 = pL2 -> next;

    }

    if ( quot !=0.0 ) {

    u = new item( quot, k );

    u -> next = list;

    list = u;

    }

    }

    reverseList ();

    L2. reverseList ():

    }

    void main()

    { List L1,L2,L;


    正确答案:(1)quot=_quot; exp=exp; next=NULL; (2)p!=NULL && exp p--> exp (3)newItem (quot exp) (4)L1.list--> exp + L2.1ist--> exp (5)pL1--> exp + pL2--> exp k (6)quot+=pL1-->quot*pL2-->quot
    (1)quot=_quot; exp=exp; next=NULL; (2)p!=NULL && exp p--> exp (3)newItem (quot, exp) (4)L1.list--> exp + L2.1ist--> exp (5)pL1--> exp + pL2--> exp k (6)quot+=pL1-->quot*pL2-->quot 解析:阅读本试题C++程序可知,程序主要由类Item和类List组成。类Item定义多项式中的项,它定义了 3个私有数据成员,即系数quot、指数exp和指向多项式的下一项的指针next。该类中定义了一个带有2个参数的构造函数,其作用是创建系数为_quot,指数为_exp的项(即创建类Item的一个对象),因此(1)空缺处所填写的语句是“quot=_quot;exp=_exp;next=NULL;”。
    类List定义了多项式的操作,数据成员list是多项式链表的链头指针。类的成员函数createList()的功能是:创建按照指数降序顺序链接的多项式。其创建的方法是:不断将新的项插入到链表中的合适位置上。若链表中存在一项p,其指数大于待插入项的指数,则待插入项应该是p的前驱。该成员函数在链表上遍历,直至找到满足上述条件的项。若链表中不存在“指数大于待插入项的指数”的项,那么待插入项将成为新的链尾。因此(2)空缺处所填写的循环判断条件是“p!=NULL&&expp->exp”。(3)空缺处应根据读入的指数和系数创建要插入的项,即(3)空缺处所填写的内容是“new ltem(quot,exp)”。若链表中存在指数与待插入项的指数相等,则应合并同类项。
    成员函数multiplyList(L1,L2)用于计算多项式L1和L2的乘积。首先计算L1和L2的乘积多项式的最高幂次,即多项式L1和L2的最高次项的指数之和。由于多项式L1和L2的各项是按照指数降序排列的,两个多项式的第一项分别是最高次幂项,这两项的指数之和就是乘积多项式的最高次幂,因此(4)空缺处所填写的内容是“L1.1ist->exp+L2.list->exp”。
    为了实现系数的乘积求和计算,当多项式L1从幂次高至幂次低逐一考虑各项的系数时,多项式L2应从幂次低至幂次高的顺序考虑各项的系数,以便将两个多项式中所有幂次和为众的两项系数相乘后累加。由于应用程序中所使用的数据结构是单链表,因此成员函数先将其中多项式L2的链接顺序颠倒,待计算完成后再将多项式L2的链接顺序颠倒,即恢复多项式L2原来的链接顺序。乘积多项式从最高次(L1与L2的幂次和)幂系数至0次幂系数的顺序逐一计算。
    为求A次幂这一项的系数,对于L1的考查顺序是从最高次幂项至最低次幂项,而L2的考查顺序是从最低幂次项至最高次项。首先跳过多项式L1中高于k次幂的项,设低于k次幂的项最高次幂是j次幂,对于多项式L2,跳过低于k-j次幂的项,因此(5)空缺处所填写的内容是“pL1->exp+pL2->expk”。
    考虑多项式L1和L2剩余各项的循环,若两多项式的当前项幂次和为k,则累计它们系数的乘积,并分别准备考虑下一项,因此(6)空缺处所填写的语句是“quot+=pL1->quot*pL2->quot”:若两个多项式的当前项幂次和大于A,则应该考虑幂次和更小的项,即应准备考虑多项式L1的下一项:若两个多项式的当前项幂次和小于A,则应该考虑幂次和更大的项,准备考虑多项式L2的下一项;若所有幂次和为A的项的系数乘积之和不等于0,则应在乘积多项式中有这一项,生成这一项的新节点(让指针u指向该节点),并将它插在乘积多项式的末尾。

  • 第14题:

    以下程序的输出结果是( )。 Option Base 1 Private Sub Command1_Click() Dim a(10),p(3) as Integer k=5 For I-1 to 10 a(i)=I Next I For j=1 to3 p(i)=a(I*j) Next j For I=l to 3 k=k+ p (I)*2 Next I Print k End Sub

    A.33

    B.28

    C.35

    D.37


    正确答案:A
    解析:此题中共定义了两个数组:a(0,p(0,共用到了3次For循环。第1个For语句对数组a(i)赋值,a(1)…a(10)=1...10:第2个For语句,对p(1):1,p(2):4,p(3):9;第3个For语句,计算k的值,3次循环分别得到:5,15, 33。答案为A。

  • 第15题:

    在窗体上画一个命令按钮,然后编写如下事件过程: Private Sub Commandl_Click() Dim m As Integer, n As Integer, p As Integer m=3: n=5: p=0 Call Y(m, n, p) Print Str(p) End Sub Sub Y(ByVal i As Integer, ByVal j As Integer, k As Integer) k=i+j End Sub 程序运行后,如果单击命令按钮,则在窗体上显示的内容是( )

    A.4

    B.6

    C.8

    D.10


    正确答案:C
    解析:此程序考查了函数的调用,函数过程有3个形参,功能是将第一个和第二个形参的和赋给第三个形参,其中前两个形参是按值传递,不会影响实参的数值,即在调用函数过程的过程中,不变化实参的数值;而第三个形参是按址传递,传递的是实参的地址,这样实参会随着过程中形参的变化而变化,即改变实参的数值。在主调过程中定义了三个整型变量,分别赋值3、5、0,调用过程后 m,n的数值仍然是3、5,而p的值不再是0而变为8即m、n的和,这也是被调函数的作用。

  • 第16题:

    在窗体上画一个名称为CoilTlilandl的命令按钮,然后编写如下事件过程: Private Sub command1 Click() Dim m As Integer, i As Integer, x(3)As Integer For i=0 To 3:x(i)=i:Next i For i = 1 To 2: Call sub1(x,i):Next i For i = 0 To 3: Print x(i);: Next i End Sub Private Sub sub1(a()As Integer,k As Integer) Dim i As Integer Do a(k)=a(k)+a(k+1) j = j + 1 Loop While j < 2 End Sub 程序运行后,单击命令按钮,则窗体上显示的内容是

    A.0 3 7 5

    B.0 1 2 3

    C.3 2 4 5

    D.0 5 8 3


    正确答案:D
    解析:数组也可以作为函数或者过程的参数,使用方法是直接使用数组名加括号,也可以直接使用数组名,采用sub1(x)和sub1(x())的调用形式都正确。变量i的作用只控制循环次数。

  • 第17题:

    执行下面的程序后,输出的结果是 p=1 For j=1 To 4 p=p - 1:q=0 For k=1 To 4 p=p + 1:q=q + 1 Next k Next j Print p;q

    A.1 4

    B.13 4

    C.12 8

    D.206


    正确答案:B
    解析:本题是一个多重循环语句,是For…Next结构的两重迭用,根据“拔皮法”,一层一层分析可知,最后p=13,q=4。

  • 第18题:

    int AA(LNode *HL , ElemType x)

    {

    int n=0; LNode *p=HL;

    while (p!=NULL)

    {

    if (p->data= =x) n++;

    p=p->next; }

    return n;

    }

    对于结点类型为LNode的单链表,以上算法的功能为:()


    正确答案:统计单链表中结点的值等于给定值x的结点数。

  • 第19题:

    下列算法将单链表中值重复的结点删除,使所得的结果表中各结点值均不相同,试完成该算法。 void DelSameNode(LinkList L) //L是带头结点的单链表,删除其中的值重复的结点// {ListNode * p,*q,*r; p=L->next; //p初始指向开始结点// while(p){ //处理当前结点p// q=p; r=q->next; do { //删除与结点*p的值相同的结点// while(r&&r->data!=p->data){ q=r; r=r->next; } if(r){ //结点*r的值与*p的值相同,删除*r// q->next=r->next; free(r); r=(); } }while( r ); p=p->next; } }


    正确答案:q->next

  • 第20题:

    已知L是无表头结点的单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。 a.在P结点后插入S结点的语句序列是()。 b.在P结点前插入S结点的语句序列是()。 c.在表首插入S结点的语句序列是()。 d.在表尾插入S结点的语句序列是()。 (1)P->next=S; (2)P->next=P->next->next; (3)P->next=S->next; (4)S->next=P->next; (5)S->next=L; (6)S->next=NULL; (7)Q=P; (8)while(P->next!=Q)P=P->next; (9)while(P->next!=NULL)P=P->next; (10)P=Q; (11)P=L; (12)L=S; (13)L=P;


    正确答案: a.(4)(1)
    b.(7)(11)(8)(4)(1)
    c.(5)(12)
    d.(9)(1)(6)

  • 第21题:

    已知L是带表头结点的非空单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。 a.删除P结点的直接后继结点的语句序列是()。 b.删除P结点的直接前驱结点的语句序列是()。 c.删除P结点的语句序列是()。 d.删除首元结点的语句序列是()。 e.删除尾元结点的语句序列是()。 (1)P=P->next; (2)P->next=P; (3)P->next=P->next->next; (4)P=P->next->next; (5)while(P!=NULL)P=P->next; (6)while(Q->next!=NULL){P=Q;Q=Q->next;} (7)while(P->next!=Q)P=P->next; (8)while(P->next->next!=Q)P=P->next; (9)while(P->next->next!=NULL)P=P->next; (10)Q=P; (11)Q=P->next; (12)P=L; (13)L=L->next; (14)free(Q);


    正确答案:a.(11)(3)(14)
    b.(10)(12)(8)(3)(14)
    c.(10)(12)(7)(3)(14)
    d.(12)(11)(3)(14)
    e.(9)(11)(3)(14)

  • 第22题:

    填空题
    函数实现单链表的删除算法,请在空格处将算法补充完整。int ListDelete(LinkList L,int i,ElemType *s){ LNode *p,*q; int j; p=L;j=0; while(( (1) )&&(jnext;j++; } if(p->next==NULL||j>i-1) return ERROR; q=p->next; (2) ; *s=q->data; free(q); return OK;}/*listDelete*/

    正确答案: (1)p->next!=NULL (2)p->next=q->next
    解析: 暂无解析

  • 第23题:

    填空题
    写出算法的功能。int L(head){ node * head; int n=0; node *p; p=head; while(p!=NULL) { p=p->next; n++; } return(n); }

    正确答案: 求单链表head的长度
    解析: 暂无解析