第二章练习题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
则执行(
)。
A、s->next=p;p->next=s; B、s->next=p->next;p->next=s;
C、s->next=p->next;p=s; D、p->next=s;s->next=p;
11、在一个单链表中,已知 q 是 p 的前趋结点,若 q 和 p 之
间插入结点 s,则执行(
)。
5、带头结点的单链表为空的判定条件是( )。
A 、 head=NULL
B 、 head->next=NULL
C、
head->next=head D、head!=NULL
6、不带头结点的单链表 head 为空的判定条件是( )。
A 、 head=NULL
B 、 head->next=NULL
C、
head->next=head D、head!=NULL
L.elem[j+1]=e; ++L.length; return OK; }
3、提示:两个表的公共元素指的是既存在于 A 表中,也存 在于 B 表中的元素,为了操作方便,先让单链表 C 带有一个 头结点 c,再后将其删除。 LinkList Inter_eq(LinkList a,LinkList b) {LinkList p,q,r,c;
之后插入结点 s 的操作序列是(
)。
A、p->rlink=s;s->llink=p;p->rlink->llink=s;s->rlink=p->rlink;
B、p->rlink->s;p->rlink->llink=s;s->llink=p;s->rlink=p->rlink;
C、s->llink=p;s->rlink=p->rlink;p->rlink=s;p->rlink->llink=s;
D、while(Q->next!=NULL){P=Q;Q=Q->next;}
E、while(P->next!=Q)P=P->next;
F、Q=P; G、Q=P->next; H、P=L; I、L=L->next;
J、free(Q);
5、已知 L 是带表头结点的非空链表,且 P 结点既不是首元
结点,也不是尾元结点,试从下列提供的答案中选择合适
下列功能: (1) 找出最小值结点,且显示该数值。 (2) 若该数值为奇数,则将其与直接后继结点的数
值交换。 (3) 若为偶数,则将其直接后继结点删除。
参考答案:
一、选择题
1、E,A 2、C 3、B 4、D 5、B 6、A 7、C 8、
B 9、A 10、B 11、C 12、C 13、D 14、A,C,
);
12、在双向链表中,每个结点有两个指针域,一个指向( ), 另一个指向( )。
13、顺序表中逻辑上相邻的元素的物理位置( )相邻。 单链表中逻辑上相邻的元素的物理位置( )相邻。
三、 简答题 1、 若较频繁地对一个线性表进行插入和删除操作,该线 性表宜采用哪种存储结构?为什么? 2、 描述概念:头指针、头结点、首元结点的区别? 3、 设 A 是一个线性表(a1a2…an),采用顺序存储结构, 则在等概率的前提下,平均每插入一个元素需要移动的 元素个数为多少?若元素插在 ai 与 ai+1 之间(0<=I<=n-1) 的概率为 2(n-i)/(n(n+1)),则平均每插入一个元素所要移 动的元素个数又是多少?
void split(SqList A,SqList &B,SqList &C) {//采用顺序存储结构实现
int I;B.length=C.length=0; for(I=0;I<AS.length;I++)
{if(A.elem[i]>0){B.elem[B.length]=A.elem[i];B.length++;} else {C.elem[C.length]=A.elem[i];C.length++;}
*sizeof(ElemType)); if(!newbase)exit(OVERFLOW); L.elem=newbase; L.listsize=+LISTINCRMENT;} For(j=L.length-1;j>=0&&e<L.elem[j];j--)L.elem[j+1]
=L.elem[j];
A、s-next=p->next;p->next=s; B、p->next=s->next;s->next=p;
C、q->next=s;s->next=p;D、p->next=s;s->next=q;
12、假设双链表结点的类型如下:
typedef struct linknode{
int
data; //数据域
I、
while(P->next!=NULL)P=P->next;
4、已知 L 是带表头结点的非空单链表,试从下列提供的答案
中选择合适的语句序列。
(1)删除首元结点的语句序列是(
)
(2)删除尾元结点的语句序列是(
)
A、P=P->next; B、P->next=P->next->next;
C、while(P!=NULL)p=p->next;
D
二、填空题
1、 没有;1
2、 表中一半;该元素的位置
3、 (1)FC (2)BIAG
4、 (1)HGBJ (2)HFDBJ
5、 (1)FAI (2)EGDAI
6、 n/2, n/4
7、 O(1 )
O(n)
8、 线性表
9、 插入和删除首元素时不必进行特殊处理
10、 其直接前趋结点的链域 11、 q->prior=p; 12、 前趋结点,后继结点 13、 必定,不一定
H、L=L->next; I、free(Q);
6、已知结点编号,在各结点查找概率相等的情况下,从 n 个 结点的单链表中查找一个结点,平均要访问( )个结
点,从 n 个结点的双链表中查找一个结点,平均要访问
( )个结点。
7、对于一个具有 n 个结点的单链表,在已知 p 所指结点后插
入一个新结点的时间复杂度是( );在值域为给定值的
B、p->llink=q;q->rlink=p;p->llink->rlink=q;q->llink=p->llink
C、q->llink=p->rlink;q->rlink=p;p->llink->rlink=q;p->llink=q;
D、以上都不对
13、如上题结点结构,如在此非空循环双向链表的结点 p
7、非空的循环单链表 head 的尾结点 P 满足( )。
A、P->NEXT=NULL B、p=NULL C、p->next==head
D、p==head
8、在一个具有 n 个结点的有序单链表中插入一个新结点并仍
然有序的时间复杂度是( )。
A、O(1) B、O(n) C、O(n2) D、O(nlog2n)
A、表元素 B、字符 C、数据元素 D、数据项 E、
信息
3、“线性表的逻辑顺序和物理顺序总是一致的。”这个结论是
( )。
A、正确的 B、错误的 C、不一定,与具体结构有关。
4、线性表采用链式存储结构时,要求内存中可用存储单元的
地址( )。
A、必须是连续的 B、部分地址必须是连续的 C、一定
是不连续的 D、连续或不连续都可以。
的语句序列。
(1)删除 P 结点的直接后继结点的语句序列是(
)
(2)删除 P 结点的直接前趋结点的语句序列是(
)
ቤተ መጻሕፍቲ ባይዱ
A、P->next=P->next->next; B、P=P->Pnext->next;
C、while(P->next!=Q)P=P->next;
D、while(P->next->next=Q)P=P->next; E、Q=P; F、Q=P->next; G、P=L;
} }
2、 status ListInsert(SqList &L,ElemType e) {ElemType *p,*q,*newbase; int j; if(L.length>=L.listsize){ newbase=(ElemType )realloc(L.elem, (L.listsize+LISTINCRMENT)
第二章练习题
一、 选择题
1、表长为 N 的顺序表,当在任何位置上插入或删除一个元
素的概率相等时,插入一个元素所需移动元素的平均次数为
(
),删除一个元素需要移动的元素个数为( )。
A. (N-1)/2 B. N C. N+1 D. N-1 E. N/2
F. (N+1)/2 G. (N-2)/2
2、线性表是具有 N 个( )的有限序列。
9、在一个单链表中,若删除 P 所指结点的后继结点,则执行
(
)。
A、p->next=p->next->next
B、p=p->next;p->next=p->next->next C、p->next=p->next;
D、p=p->next->next;
10、在一个单链表中,若在P所指结点之后插入S所指结点,
(1)表首插入S结点的语句序列是(
)。
(2)表尾插入S结点的语句序列是(
)。
A、P->next=S; B、P=L; C、L=S; D、P->next=S->next;
E、S->next=P->next; F、S->next=L; G、S->next=NULL;
H 、 while(P->next!=Q)p=p->next;
struct linknode *llink; //指向前趋结点的指针域
struct linknode *rlink; //指向后继结点的指针域
}bnode
现将一个 q 所指新结点作为非空双向链表中的 p 所指结点
的前趋结点插入到该双链表中,能正确完成此要求的语句段
是(
)。
A、q->rlink=p;q->llink=p->llink;p->llink=q;p->llink->rlink=q;
D、在单链表最后一个元素后插入一个新元素
二、 填空题 1、在线性结构中,第一个结点(
)前趋结点,其余每
个结点有且只有( )个前趋结点。
2、在顺序表中插入或删除一个元素,需要平均移动( )
元素,具体移动的元素个数与( )有关。
3、已知L是无表头结点的单链表,试从下列提供的答案中
选择合适的语句序列,分别实现:
D、s->llink=p;s->rlink=p->rlink;p->rlink->llink=s;p->rlink=s;
14、在一个长度为 n 的单链表上,设有头和尾两个指针,执
行(
)操作与链表的长度无关。
A、删除单链表中的第一个元素 B、删除单链表中最后
一个元素 C、在单链表第一个元素前插入一个新元素
三、简答题 1、 宜采用链式存储结构,因为它使线性表的插入和删除操
作的时间复杂度为 O(1),而顺序存储结构的为 O(n)。 2、 首元结点是指链表中存储线性表中第一个数据元素的
结点。为了操作方便,通常在链表的首元结点之前附设一 个结点,称为头结点,该结点的数据域中不存线性表的数 据元素,其作用是为了对链表进行操作时,可以对空表、 非空表的情况以及对首元结点进行统一的处理。头指针是 指向链表第一个结点(头结点或首元结点)的指针。若链 表中附设头结点,则不管线性表是否为空表,头指针均不 为空,否则表示空表的链表的头指针为空。这三个概念对 单链表、双向链表和循环链表均适用。 3、 在等概率前提下,平均每插入一个元素需要移动的元素 个数为(0+1+2+…+n)/(n+1)=n/2。若元素插在 ai 与 ai+1 之 间(0<=i<=n-1)的概率为 2(n-i)/(n(n+1)),则平均每插入一 个元素所要移动的元素个数为:(2n+1)/3 四、设计题 1、
四、 设计题 1、 编写一个函数将一个顺序表 A(有多个元素且任何元 素不为 0)分拆成两个顺序表,使 A 中大于 0 的元素存 放在 B 中,小于 0 的元素存放在 C 中。 2、 设顺序表 L 中的数据元素递增有序。试写一算法,将 e 插入到顺序表的适当位置,插入后保持该表的有序性。 3、 A、B 为元素递增有序排列的单链表(同一表中可能 有相同元素),编写算法另建一单链表 C,保存两个表的 公共元素,要求 C 的元素值各不相同且递增有序。 4、 设有一个由正整数组成的无序单链表,编写算法实现
结点后插入一个新结点的时间复杂度是(
)。
8、单链表是( )的链接存储表示。
9、单链表中设置头结点的作用是( )。
10、在单链表中,除首元结点外,任一结点的存储位置由
(
)指示。
11、在非空双向循环链表中,在结点 q 的前面插入结点 p 的
过程如下:
p->prior=q->prior;
q->prior->next=p;p->next=q;(