以下算法是删除带头结点单链表L中的最小的元素,横线处应填入的语句是()。 void DelMinNode(LinkList L) { p=L->next; pre=L; if(L==NULL) return; while(p->next!=NULL) //pre指向最小元素的前驱元素,开始默认第一个结点最小,pre指向头结点 { if(p->next->data < pre->next->data) pre=p; } //删除pre后面的结点 p=pre->next; ; }
A.free(p); pre->next=p->next;
B.free(p->next);pre->next=p->next;
C.pre->next=p->next; free(p);
D.p->next=pre->next;free(p);
第1题:
程序中已构成如下图所示的不带头结点的单向链表结构,指针变量s、p、q均已正确定义,并用于指向链表结点,指针变量s总是作为头指针向链表的第—个结点。
若有以下程序段 q=s; s=s->next; p=s; while(p->next) p=p->next; P->next=q; q->next=NULL; 该程序段实现的功能是______。
A.首结点成为尾结点
B.尾结点成为首结点
C.删除首结点
D.删除尾结点
第2题:
A、p->next=p->next->next;
B、p->next=p->next;
C、p=p->next;
D、p=p->next->next;
第3题:
p指向线性链表中某一结点,则在线性链表的表尾插入结点s的语句序列是()。
A.while(p->next!=NULL)p=p->next;p->next=s;s->next=NULL;
B.while(p!=NULL)p=p->next;p->next=s;s->next=NULL;
C.while(p->next!=NULL)p=p->next;s->next=p;p->next=NULL;
D.while(p!=NULL)p=p->next->next;p->next=s;s->next=p->next;
第4题:
阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。
[说明1]
L为一个带头结点的循环链表。函数LinkList deletenode(LinkList L,int c)的功能是删除L中数据域data的值大于C的所有结点,并由这些结点组建成一个新的带头结点的循环链表,其头指针作为函数的返回值。
[C函数1]
LinkList deletenode(LinkList L,int c)
{LinkList Lc,P,pre;
pre=L;
p=(1);
Lc=(LinkList)malloc(sizeof(Listnode));
Lc->next=Lc;
while(P!=L)
if(p->data>C){
(2);
(3);
Lc->next=p;
p=pre->next;
}
else{
pre=p;
p=pre->next;
}
return Lc;
}
[说明2]
递归函数dec_to_k_2(int n,int k)的功能是将十进制正整数n转换成k(2≤k≤9)进制数,并打印。
[C函数2]
dec to k 2(int n,int k)
{ if(n!=O){
dec to k 2( (4) ,k);
printf("%d", (5) );
}
}
第5题:
在单链表中,指针p指向元素为x的结点,下面哪条语句实现“删除x的后继”? ( )
A.p=p->next
B.p->next=p->next->next
C.p->next=p
D.p=p->next->next
第6题:
设指针变量p指向单链表中的结点A,则删去结点A的语句序列为 Q=p->next;p->data = p->data: p->next=(); :feee(q);
第7题:
第8题:
在一个带头结点的循环双向链表中,若要删除指针p所指向的结点则执行()嗓作。
第9题:
设单链表中指针p指向结点a,若要删除p之后的结点(若存在),则需修改指针的操作为()。
第10题:
已知指针P指向键表L中的某结点,执行语句P=P-〉next不会删除该链表中的结点。
第11题:
p->next=p
p=p->next->next
p->next=p->next->next
p=p->next;p->next=p->next->next
第12题:
p->next=p->next->next
p=p->next
p=p->next->next
next=p
第13题:
A、p=p->next;
B、p->next=p->next->next;
C、p->next=p;
D、p->next->next=p->next->next->next;
第14题:
设线性链表中结点的结构为(data,next)。若想删除结点p的直接后继,则应执行下列()操作。
A.p->next=p->next->next;
B.p=p->nextp->next=p->next->next;
C.p->next=p->next;
D.p=p->next->next;
第15题:
函数min()的功能是:在带头结点的单链表中查找数据域中值最小的结点。请填空
include <stdio.h>
struct node
{ int data;
struct node *next;
};
int min(struct node *first)/*指针first为链表头指针*/
{ struct node *p; int m;
p=first->next; re=p->data; p=p->next;
for( ;p!=NULL;p=【 】)
if(p->data<m ) re=p->data;
return m;
}
第16题:
阅读下列函数说明和C代码,将应填入(n)处的字句写在对应栏内。
【说明2.1】
L为一个带头结点的循环链表。函数deletenode(LinkList L, int c)的功能是删除L中数据域data的值大于c的所有结点,并由这些结点组建成一个新的带头结点的循环链表,其头指针作为函数的返回值。
【函数2.1】
LinkList deletenode(LinkList L, int c)
{
LinkList Lc,p,pre;
pre=L;
p=(1);
Lc=(LinkList)malloc(sizeof(ListNode) );
Lc->next=Lc
while(p!=L)
if(p->data>c)
{
(2);
(3);
Lc->next=p;
p=pre->next;
}
else
{
pre=p;
p=pre->next;
}
return Lc;
}
【说明2.2】
递归函数dec_to_k_2(int n, int k)的功能是将十进制正整数n转换成k<2≤k≤9)进制数,并打印。
【函数2.2】
dec_to_k_2(int n, int k)
{ /*将十进制正整数n转换成k(2≤k≤9)进制数*/
if(n!=0)
{
dec_to_k_2((4),k);
printf("%d",(5));
}
}
第17题:
阅读以下说明和 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; }
第18题:
第19题:
第20题:
设rear是指向非空带头结点的循环单链表的尾指针,则在起始结点之前插入指针p所指结点的操作可表示为()
第21题:
在一个单链表中,若要删除p指针所指向结点的后继结点,则执行()
第22题:
下列算法将单链表中值重复的结点删除,使所得的结果表中各结点值均不相同,试完成该算法。 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; } }
第23题:
p->next = rear->next->next; rear->next = p
p->next = rear->next; rear->next->next = p
p->next = rear->next->next; rear->next->next = p
p->next = rear->next->next; rear->next->next = p->next
第24题:
p = p->prior;p->prior->next = p->next
p->prior->next = p;p->next = p->next->prior
p->next->prior = p;p->next = p->next->next
p->prior->next = p->next;p->next->prior = p->prior