刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

阅读以下说明和 C 代码,填补代码中的空缺,将解答填入答题纸的对应栏内。

 【说明】 函数 GetListElemPtr(LinkList L,int i)的功能是查找含头结点单链表的第i个元素。若找到,则返回指向该结点的指针,否则返回空指针。 函数DelListElem(LinkList L,int i,ElemType *e) 的功能是删除含头结点单链表的第 i个元素结点,若成功则返回 SUCCESS ,并由参数e 带回被删除元素的值,否则返回ERROR 。 例如,某含头结点单链表 L 如图 (a) 所示,删除第 3 个元素结点后的单链表如图 4-1 (b) 所示。

#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;  

}

请填补C代码中的空缺,完善GetListElemPtr和DelListElem两个函数。

使用微信搜索喵呜刷题,轻松应对考试!

答案:

(1)k<i  

(2)p=p->next 

(3) p=L  

(4)p->next  

(5)*e=q->data

解析:

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

解析:
本题考察链表的基本操作,包括查找和删除节点。

对于第一个函数GetListElemPtr,其目的是找到链表中第i个元素的指针。在查找过程中,我们使用变量k来记录已经遍历的节点数。初始时,p指向第一个节点,然后逐个遍历节点直到找到第i个节点或者遍历完所有节点。因此,第一个空填k<i,表示当k小于i时继续查找。第二个空填p=p->next,表示将p指向下一个节点进行查找。

对于第二个函数DelListElem,其目的是删除链表中第i个节点,并返回删除节点的值。首先判断是否存在第i个节点,然后让p指向第i个节点的前驱节点。如果i等于1,那么p直接指向头节点。否则,通过调用GetListElemPtr找到第i-1个节点。然后让q指向待删除的节点,即p的下一个节点。接下来,将p的下一个节点指向q的下一个节点,从而删除q节点。最后,通过参数e带回被删除节点的值。因此,第三个空填p=L,第四个空填p->next,第五个空填*e=q->data,表示将删除节点的值赋给e。

创作类型:
原创

本文链接:请填补C代码中的空缺,完善GetListElemPtr和DelListElem两个函数。

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share