更多"假设某个不设头指针的无头结点单向循环链表的长度大于1,S为指向链表中某"的相关试题:
[填空题]
假设某个不设头指针的无头结点单向循环链表的长度大于1,S为指向链表中某个结点的指针。算法f30的功能是,删除并返回链表中指针S所指结点的前驱。请在空缺处填入合适的内容,使其成为完整的算法。
typedef struct node{
DataType data;
struct node *next;
}*LinkList;
DataType f 30(LinkList s){
LinkList pre,p;
DataType e;
pre=s;
p=s—>next;
while( (1) ){
pre=p;
(2) ;
}
pre—>next= (3) ;
e=p—>data;
free(p);
return e;
}
(2)
[简答题]分别写出删除单向和双向循环链表中指针P所指的结点的直接后继结点(非尾结点)对应的语句。
(1)单向循环链表。
(2)双向循环链表。
[单项选择]对于n个结点的单向链表(无表头结点)需要指针单元的个数至少为
A. n-1
B. n
C. n+1
D. 2n
[填空题]以下函数creat用来建立一个带头结点的单向链表,新产生的结点总是插在链表的末尾。单向链表的头指针作为函数值返回。请填空。
#include <stdio.h>
struct list
{ char dara;
struct list *next;
};
struct list *creat( )
{ struct list *h,*p,*q;
char ch;
h= (struct list (*) malloc (sizeof (struct list));
______;
ch=getchar( );
while(ch!=’’)
{ p=(struct list*) malloc) sizeof (struct list));
p->data=ch;
______;
q=p;
ch=getchar( );
}
p->next=’/0’;
______:
}
[单项选择]单向链表中往往含有一个头结点,该结点不存储数据元素,一般令链表的头指针指向该结点,而该结点指针域的值为第一个元素结点的指针。以下关于单链表头结点的叙述中,错误的是()。
A. 若在头结点中存入链表长度值,则求链表长度运算的时间复杂度为O(1)
B. 在链表的任何一个元素前后进行插入和删除操作可用一致的方式进行处理
C. 加入头结点后,代表链表的头指针不因为链表为空而改变
D. 加入头结点后,在链表中进行查找运算的时间复杂度为O(1)
[单项选择]单向链表的每一个结点都有一个指向它的后续结点的指针link,现有结点p和q,结点q在结点p的前面,要删除结点P,正确的操作应该是()
A. q↑.link:=p↑.link;
B. p↑.link:=q↑.link;
C. q↑.link:=p;p↑.link:=q;
D. q:=p↑.link;p↑.link:=q↑.link;
[单项选择]
设长度为n的链队列用单循环链表表示,若只设头指针,则人队、出队操作的时间是 (41) ;若只设尾指针,需要的时间为 (42) 。
41()
A. O(n
2),O(1)
B. O(n),O(1)
C. O(n
2-1),O(n)
D. O(n-1),O(n-1)
[填空题]以下函数creat用来建立一个带头结点的单向链表,新产生的结点是插在链表头的
末尾。单向链表的头指针作为函数值返回。请填空。
# include<stdio.h>
struct list
char data;
struct list * next;
;
struct list * creat;
struct list * h,* p,* q;
char ch;
h=(______)malloc ( sizeof(struct list));
p=q=h;
ch=getchar( );
while(ch!=’’)
p=(______)mallco(sizeof(struct list));
p->data=ch;
q->next=p;
q=p;
ch=getchar( );
p->next=’/0’;
______;
[单项选择]设rear是指向非空带头结点的循环单链表的尾指针,则删除起始结点的操作可表示为( )
A. s=rear;
B. rear=rear—>next;
C. rear=rear—>next—>next;
D. s=rear—>next—>next;
[单项选择]某单循环链表头指针为head且表长大于1,指针p指向表中某个结点,若p→next→next= head,则 (11) 。
A. p指向头结点
B. p指向尾结点
C. *p的直接后继是头结点
D. *P的直接后继是尾结点
[单项选择]在头指针为head且表长大于1的单循环链表中,指针p指向表中某个结点,若P→*next→*next=head,则()。
A. p指向头结点
B. p指向尾结点
C. *p的直接后继是头结点
D. *p的直接后继是尾结点
[单项选择]在双向循环链表中,在P指针所指向的结点前插入一个指针q所指向的新结点,其修改指针的操作是()
A. P->llink=q;q->rlink=p;P->llink->rlink=q;q->llink=p;
B. P->llink=q;P->llink->rlink=q;q->rlink=p;q->llink=p->llink;
C. q->rlink=p;q->liink=p->llink;P->llink->rlink=q;P->llink=q;
D. q->llink=p->llink;q->rlink=p;P->llink=q;P->rlink=q;