函数实现单链表的删除算法,请在空格处将算法补充完整。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) ;

题目

函数实现单链表的删除算法,请在空格处将算法补充完整。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.●试题三阅读下列说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】本题给出四个函数,它们的功能分别是:1.int push(PNODE *top,int e)是进栈函数,形参top是栈顶指针的指针,形参e是入栈元素。2.int pop(PNODE *top,int *e)是出栈函数,形参top是栈顶指针的指针,形参e作为返回出栈元素使用。3.int enQueue(PNODE *tail,int e)是入队函数,形参tail是队尾指针的指针,形参e是入队元素。4.int deQueue(PNODE *tail,int *e)是出队函数,形参tail是队尾指针的指针,形参e作为返回出队元素使用。以上四个函数中,返回值为0表示操作成功,返回值为-1表示操作失败。栈是用链表实现的;队是用带有辅助结点(头结点)的单向循环链表实现的。两种链表的结点类型均为:typedef struct node{int value;struct node *next;}NODE,*PNODE;【函数1】int push(PNODE *top,int e){PNODE p=(PNODE)malloc (sizeof(NODE));if (!p) return-1;p-> value =e;(1) ;.*top=p;return 0;}【函数2】int pop (PNODE *top,int *e){PNODE p=*top;if(p==NULL)return-1;*e=p->value;(2) ;free(p);return 0;}【函数3】int enQueue (PNODE *tail,int e){PNODE p,t;t=*tail;p=(PNODE)malloc(sizeof(NODE));if(!p)return-l;p->value=e;p->next=t->next;(3) ;*tail=p;return 0;}【函数4】int deQueue(PNODE *tail,int *e){PNODE p,q;if((*tail)->next==*tail)return -1;p=(*tail)->next;q=p->next;*e=q->value;(4) =q->next;if(*tail==q) (5) ;free(q);return 0;}

4.●试题三阅读下列函数说明和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);}

更多“函数实现单链表的删除算法,请在空格处将算法补充完整。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||ji-1) return ERROR; q=p-next; (2) ; *s=q”相关问题
  • 第1题:

    阅读以下说明和C语言函数,将应填入(n)处的语句写在对应栏内。

    【说明】

    下面的程序构造一棵以二叉链表为存储结构的二叉树。

    【函数】

    BitTree *createbt(BitTree *bt)

    {

    BitTree *q;

    struct node *s[30];

    int j,i;

    char x;

    printf("i,x=");

    scant("%d,%c",&i,&x);

    while(i!=0 && x!='$')

    {

    q=(BitTree *}malloc(sizeof(BitTree));//生成一个结点

    (1);

    q->lchild=NULL;

    q->rchild=NULL;

    (2) ;

    if ((3))

    {

    j=i/2; // j为i的双亲结点

    if(i%2==0)

    (4); //i为j的左孩子

    else

    (5); //i为j的右孩子

    }

    printf("i,x=");

    scanf("%d,%c",&i,&x);

    }

    return s[i];

    }


    正确答案:(1)q->data=x (2)s[i]=q (3)i!=1 (4)s[j]->lchild=q (5)s[j]->rchild=q
    (1)q->data=x (2)s[i]=q (3)i!=1 (4)s[j]->lchild=q (5)s[j]->rchild=q 解析:本题考查二叉树的构造。
    题目要求构造一棵二叉树,而二叉树的性质如下:如果对一棵有n个结点的完全二叉树的结点按层序编号(从第1层到第[log2n]+1层,每层从左到右),则对任一结点i(1≤i≤n),有:
    (1)如果i=1,则结点i无双亲,是二叉树的根;如果i>1,则其双亲是结点[i/2]。
    (2)如果2i>n,则结点i为叶子结点,无左孩子:否则,其左孩子是结点2i。
    (3)如果2i+1>n,则结点i无右孩子;否则,其右孩子是结点2i+1。
    下面我们来看程序。程序中声明了一个结点指针数组,用来保存生成的树中结点。用从键盘输入的方式来确定要插入的字符x和此结点在二叉树中的位置i(这个位置是指在完全二叉树中编号的位置)。
    第(1)空是在生成一个新结点后的操作,生成了一个新结点后,自然要将从键盘输入的字符x值存放进来,以及修改结点的两个指针域。程序中指针域都赋了空,因此,第(1)空的任务应该是将字符x写进来,因此,此空答案为q->data=x。
    第(2)空是在对结点完成操作后的操作,根据题目意思,生成的结点应该要保存到数组s中,此数组是一个指针数组,保存结点时,是将结点的地址保存进数组中相应的位置,因此,此空答案为s[il=q。
    第(3)空是条件判断语句的条件,结合下面的程序可以知道,此条件语句用来判断当前结点是不是根结点,如果不是,才执行条件语句中的内容。根据上面的分析,如果i=1,则结点i无双亲,是二叉树的根,因此,此空的答案为i!=1。
    第(4)空处后面有注释,说明i是j的左孩子结点,这个时候我们应该让j结点的左孩子指针指向结点i,此空就是要实现这一功能。而结点,j被存放在数组s中的第j个位置,因此,此空答案为s[i]->lchild=q。
    从程序中很容易看出,第(5)空与第(4)空功能相似,只是说i是j的右孩子结点,因此,让j结点的右孩子指针指向结点乙此空答案为s[j]->rchild=q。

  • 第2题:

    阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。

    【函数2.1】

    void sort(char *s,int num)

    {int i,j--num;

    char t;

    while(j-->1)

    for(i=0;i<j;i++)

    if(s[i]>s[i+1])

    {t=s[i];

    s[i]=s[i+1];

    s[i+1]=t;

    }

    void main()

    {char *s="CEAedea";

    sort(s,5);

    printf("%s",s);

    }

    上述程序的结果是(1)

    【函数2.2】

    void main()

    { union {int ig[6];

    Char s[12];} try;

    try. ig[0]=0x4542; try.ig[1]=0x2049;

    try. ig[2]=0x494a; try.ig[3]=0x474e;

    try. ig[4]=0x0a21; try.ig[5]=0x0000;

    pintf("%s",try, s);

    }

    上述程序的结果是(2)

    【函数2.3】

    void main()

    { char *letter[5]= { "ab","efgh","ijk","nmop","st"};

    char **p;

    int i;

    p=letter;

    for(i=0;i<4;i++) .

    printf("%s",p[i]);

    }

    上述程序的结果是(3)

    【函数2.4】

    main()

    {int i=4,j=6,k=8,*p=&I,*q=&j,*r=&k;

    int x,y,z;

    x=p==&i;

    y=3*-*p/(*q)+7;

    z=*(r=&k)=*p**q;

    printf("x=%d,y=%d,z=%d",x,y,z);

    }

    上述程序的结果是(4)

    【函数2.5】

    int a[]={5,4,3,2,1 };

    void main()

    {int i;

    int f=a[0];

    int x=2;

    for(i=0;i<5;i++)

    f+=f*x+a[i];

    printf("%d",f);

    }

    上述程序的结果是(5)


    正确答案:(1)ACEdeea (2) BEI JING! (3) abefghijkmnop (4) x=1y=5z=24 (5) 129
    (1)ACEdeea (2) BEI JING! (3) abefghijkmnop (4) x=1,y=5,z=24 (5) 129

  • 第3题:

    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的结点数。

  • 第4题:

    函数实现单链表的插入算法,请在空格处将算法补充完整。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

  • 第5题:

    函数实现串的模式匹配算法,请在空格处将算法补充完整。intindex_bf(sqstring*s,sqstring*t,intstart){inti=start-1,j=0;while(ilen&&jlen)if(s->data[i]==t->data[j]){i++;j++;}else{i=();j=0;}if(j>=t->len)return();elsereturn-1;}}/*listDelete*/


    正确答案:i-j+1 i-t->len+1

  • 第6题:

    函数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

  • 第7题:

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


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

  • 第8题:

    填空题
    函数实现单链表的删除算法,请在空格处将算法补充完整。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
    解析: 暂无解析

  • 第9题:

    问答题
    下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun()的功能是:将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并作为函数值返回。  请改正函数fun中的错误,使它能得出正确的结果。  注意:部分源程序在文件MODII.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!  试题程序:#include #include #include typedef struct aa{ int data; struct aa *next;}NODE;int fun(NODE *h){ int sum=0; NODE *p; p=h->next; /*********found*********/ while(p->next) {  if(p->data%2==0)   sum+=p->data;  /*********found*********/  p=h->next; } return sum;}NODE *creatlink(int n){ NODE *h,*p,*s; int i; h=p=(NODE *)malloc(sizeof(NODE)); for(i=1;idata=rand()%16;  s->next=p->next;  p->next=s;  p=p->next; } p->next=NULL; return h;}outlink(NODE *h){ NODE *p; p=h->next; printf("The LIST: HEAD"); while(p) {  printf("->%d",p->data);  p=p->next; } printf("");}main(){ NODE *head; int sum; system("CLS"); head=creatlink(10); outlink(head); sum=fun(head); printf("SUM=%d",sum);}

    正确答案:

    (1)错误:while(p->next)
    正确:while(p)或while(p!=NULL)
    (2)错误:p=h->next;
    正确:p= p ->next;
    解析:

      错误1:执行p=p->next后,p指针已经指向链表第一个包含数据域的结点。fun函数的while循环判断当前指针p指向的结点是否存在,若存在则对该结点数据域进行判断操作,而不是判断p指针的指针域是否为空。
      错误2:fun函数的while循环中判断结束后指针指向下一个结点,操作为p=p->next。

  • 第10题:

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

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

  • 第11题:

    填空题
    函数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
    解析: 暂无解析

  • 第12题:

    单选题
    有以下程序:#include int *f(int *s,int *t){ if(*s < *t)*s=*t; return s;}main(){  int i=3,j=5,*p=&i,*q=&j,*r; r=f(p,q); printf("%d,%d,%d,%d,%d",i,j,*p,*q,*r);}程序的运行结果是(  )。
    A

    5,5,5,5,5

    B

    3,5,5,5,5

    C

    5,3,3,3,5

    D

    3,5,3,5,5


    正确答案: A
    解析:
    程序执行过程为:p指向i的地址,q指向j的地址,调用函数f,比较p指向地址存储的元素值3与q指向地址存储的元素值5的大小,if语句成立时将q指向地址存储的元素值5赋给p指向地址存储的元素,即此时p指向地址存储的元素值i=5,返回值指针r指向i,最后输出5,5,5,5,5,答案选择A选项。

  • 第13题:

    阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。

    【说明】

    下面的程序构造一棵以二叉链表为存储结构的二叉树算法。

    【函数】

    BTCHINALR *createbt ( BTCHINALR *bt )

    {

    BTCHINALR *q;

    struct node1 *s [30];

    int j,i;

    char x;

    printf ( "i,x =" ); scanf ( "%d,%c",&i,&x );

    while (i!=0 && x!='$')

    { q = ( BTCHINALR* malloc ( sizeof ( BTCHINALR )); //生成一个结点

    (1);

    q->1child = NULL;

    q->rchild = NULL;

    (2);

    if((3);)

    {j=i/2 //j为i的双亲结点

    if(i%2==0

    (4) //i为j的左孩子

    else

    (5) //i为j的右孩子

    }

    printf ( "i,x =" ); scanf ( "%d,%c",&i,&x ); }

    return s[1]

    }


    正确答案:(1)q->data=x (2) s[i]=q (3) i!=1 (4) s[j]->1child=q (5) s[j]->rchild=q
    (1)q->data=x (2) s[i]=q (3) i!=1 (4) s[j]->1child=q (5) s[j]->rchild=q

  • 第14题:

    阅读以下说明和 C 代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 函数 GetListElemPtr(LinkList L,int i)的功能是查找含头结点单链表的第i个元素。若找到,则返回指向该结点的指针,否则返回空指针。 函数DelListElem(LinkList L,int i,ElemType *e) 的功能是删除含头结点单链表的第 i个元素结点,若成功则返回 SUCCESS ,并由参数e 带回被删除元素的值,否则返回ERROR 。 例如,某含头结点单链表 L 如图 4-1 (a) 所示,删除第 3 个元素结点后的单链表如 图 4-1 (b) 所示。图4-1

    define SUCCESS 0 define ERROR -1 typedef int Status; typedef int ElemType; 链表的结点类型定义如下: typedef struct Node{ ElemType data; struct Node *next; }Node ,*LinkList; 【C 代码】 LinkList GetListElemPtr(LinkList L ,int i) { /* L是含头结点的单链表的头指针,在该单链表中查找第i个元素结点: 若找到,则返回该元素结点的指针,否则返回NULL */ LinkList p; int k; /*用于元素结点计数*/ if (i<1 ∣∣ !L ∣∣ !L->next) return NULL; k = 1; P = L->next; / *令p指向第1个元素所在结点*/ while (p && (1) ) { /*查找第i个元素所在结点*/ (2) ; ++k; } return p; } Status DelListElem(LinkList L ,int i ,ElemType *e) { /*在含头结点的单链表L中,删除第i个元素,并由e带回其值*/ LinkList p,q; /*令p指向第i个元素的前驱结点*/ if (i==1) (3) ; else p = GetListElemPtr(L ,i-1); if (!p ∣∣ !p->next) return ERROR; /*不存在第i个元素*/ q = (4) ; /*令q指向待删除的结点*/ p->next = q->next; /*从链表中删除结点*/ (5) ; /*通过参数e带回被删除结点的数据*/ free(q); return SUCCESS; }


    正确答案:(1) k<i
    (2) p = p->next
    (3) p=L
    (4) p->next
    (5) *e = q->data

  • 第15题:

    阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
    [说明]
    函数GetListElemPtr(LinkList L,int i)的功能是查找含头结点单链表的第i个元素。若找到,则返回指向该结点的指针,否则返回空指针。
    函数DelListElem(LinkList L,int i,ElemType *e)的功能是删除含头结点单链表的第i个元素结点,若成功则返回SUCCESS,并由参数e带回被删除元素的值,否则返回ERROR。
    例如,某含头结点单链表L如下图(a)所示,删除第3个元素结点后的单链表如下图(b)所示。
    1.jpg

    #define SUCCESS 0 #define ERROR -1 typedef intStatus; typedef intElemType;

    链表的结点类型定义如下:

    typedef struct Node{ ElemType data; struct Node *next; }Node,*LinkList; [C代码] LinkListGetListElemPtr(LinkList L,int i) { /*L是含头结点的单链表的头指针,在该单链表中查找第i个元素结点; 若找到,则返回该元素结点的指针,否则返回NULL */ LinkList p; int k; /*用于元素结点计数*/ if(i<1 || !L || !L->next) return NULL; k=1; p=L->next; /*令p指向第1个元素所在结点*/ while(p &&______){ /*查找第i个元素所在结点*/ ______; ++k; } return p; } StatusDelListElem(LinkList L,int i,ElemType *e) { /*在含头结点的单链表L中,删除第i个元素,并由e带回其值*/ LinkList p,q; /*令P指向第i个元素的前驱结点*/ if(i==1) ______; else p=GetListElemPtr(L,i-1); if(!P || !p->next) return ERROR; /*不存在第i个元素*/ q=______; /*令q指向待删除的结点*/ p->next=q->next; //从链表中删除结点*/ ______; /*通过参数e带回被删除结点的数据*/ free(q); return SUCCESS; }


    答案:
    解析:
    k<i
    p=p->next
    p=L
    p->next
    *e=q->data


    【解析】

    本题考查C语言的指针应用和运算逻辑。
    本问题的图和代码中的注释可提供完成操作的主要信息,在充分理解链表概念的基础上填充空缺的代码。
    函数GetListElemPtr(LinkList L,int i)的功能是在L为头指针的链表中查找第i个元素,若找到,则返回指向该结点的指针,否则返回空指针。描述查找过程的代码如下,其中k用于对元素结点进行计数。

    k=1; p=L->next; /*令p指向第1个元素所在结点*/

  • 第16题:

    函数ListDelete_sq实现顺序表删除算法,请在空格处将算法补充完整。int ListDelete_sq(Sqlist *L,int i){ int k; if(i<1||i>L->length) return ERROR;for(k=i-1;klength-1;k++) L->slist[k]= (1) ; (2) ; return OK;}


    正确答案:(1)L->slist[k+1] (2) --L->Length

  • 第17题:

    下列算法将单链表中值重复的结点删除,使所得的结果表中各结点值均不相同,试完成该算法。 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

  • 第18题:

    已知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)

  • 第19题:

    已知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)

  • 第20题:

    填空题
    函数实现单链表的插入算法,请在空格处将算法补充完整。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
    解析: 暂无解析

  • 第21题:

    填空题
    函数实现串的模式匹配算法,请在空格处将算法补充完整。intindex_bf(sqstring*s,sqstring*t,intstart){inti=start-1,j=0;while(ilen&&jlen)if(s->data[i]==t->data[j]){i++;j++;}else{i=();j=0;}if(j>=t->len)return();elsereturn-1;}}/*listDelete*/

    正确答案: i-j+1 i-t->len+1
    解析: 暂无解析

  • 第22题:

    填空题
    函数ListDelete_sq实现顺序表删除算法,请在空格处将算法补充完整。int ListDelete_sq(Sqlist *L,int i){ int k; if(iL->length) return ERROR;for(k=i-1;klength-1;k++) L->slist[k]= (1) ; (2) ; return OK;}

    正确答案: (1)L->slist[k+1] (2) --L->Length
    解析: 暂无解析

  • 第23题:

    单选题
    以下选项中,不能对主函数中变量i和j的值进行交换的程序是(  )。
    A



    #include <stdio.h>
    void swap(int *p, int *q)
    {
     int *t;
     *t = *p;
     *p = *q;
     *q = *t;
    }
    main()
    {
     int i=10, j=20,*a=&i,*b=&j;
     swap(a,b);
     printf(i=%d j=%d,i,j);
    }

    B



    #include <stdio.h>
    void swap(int *p, int *q)
    {
     int t;
     t = *p;
     *p = *q;
     *q = t;
    }
    main()
    {
     int i=10,j=20,*a=&i,*b=&j;
     swap(a,b);
     printf(i=%d j=%d,i,j);
    }

    C



    #include <stdio.h>
    #include <stdlib.h>
    void swap(int *p, int *q)
    {
     int *t;
     t = (int *)malloc(sizeof(int));
     *t = *p;
     *p = *q;
     *q = *t;
     free(t);
    }
    main()
    {
     int i=10,j=20;
     swap(&i,&j);
     printf(i=%d j=%d,i,j);
    }

    D



    #include <stdio.h>
    void swap( int *p, int *q)
    {
     int t;
     t = *p;
     *p = *q;
     *q = t;
    }
    main()
    {
     int i=10,j=20,*x=&i,*y=&j;
     swap(x,y);
     printf(i=%d j=%d,i,j);
    }


    正确答案: A
    解析:
    A项,定义了一个临时指针t,实现两个指针地址的交换,而传入的参数是两个变量i和j的地址,但是函数内部交换的是地址值,并没有交换主函数中变量i与j的值;B项,调用函数传入的是i与j地址,函数体内交换的是地址内元素,临时变量t为整型变量,能实现i与j值交换;C项,调用函数传入的是i与j地址,函数体内交换的是地址内元素,临时变量t为整型指针,且已正确开辟内存,能实现i与j值交换;D项与B项相同,能实现i与j值交换。答案选择A选项。