x++;
(3)for(j=1;j<=n;j++)
{
printf(“j=%”,j);
for(k=j;k<=n;k++)
x++;
}
答:
(1)的时间复杂度为O
(1);
(2)的时间复杂度O(n);
(3)中“printf(“j=%”,j);”执行次数的数量级为O(n),“x++;”执行次数是:
n+(n-1)+(n-2)+……+2+1=n(n+1)/2
其数量级为O(n2),因此整个算法段的时间复杂度应该是O(n2)。
第2章习题解答
一、填空
1.当一组数据的逻辑结构呈线性关系时,在数据结构里就称其为线性表。
2.线性表中数据元素的个数n称为线性表的长度。
3.以顺序存储结构实现的线性表,被称为顺序表。
4.以链式存储结构实现的线性表,被称为链表。
5.不带表头结点的链表,是指该链表的表头指针直接指向该链表的起始结点。
6.在一个双链表中,已经由指针ptr指向需要删除的存储结点,则删除该结点所要执行的两条操作是①ptr->Prior->Next=ptr->Next;②ptr->Next->Prior=ptr->Prior;。
7.设tail是指向非空、带表头结点的循环单链表的表尾指针。
那么,该链表起始结点的存储位置应该表示成tail->Next->Next。
8.在一个不带表头结点的非空单链表中,若要在指针qtr所指结点的后面插入一个值为x的结点,则需要执行下列操作:
ptr=malloc(size);
ptr->Data=x;
ptr->Next=qtr->Next;
qtr->Next=ptr;
9.顺序表Sq=(a1,a2,a3,…,an)(n≥1)中,每个数据元素需要占用w个存储单元。
若m为元素a1的起始地址,那么元素an的存储地址是m+(n-1)*w。
10.当线性表的数据元素个数基本稳定、很少进行插入和删除操作,但却要求以最快的速度存取表中的元素时,我们应该对该表采用顺序存储结构。
二、选择
1.下面,对非空线性表特点的论述,C是正确的。
A.所有结点有且只有一个直接前驱
B.所有结点有且只有一个直接后继
C.每个结点至多只有一个直接前驱,至多只有一个直接后继
D.结点间是按照1对多的邻接关系来维系其逻辑关系的
2.一般单链表Lk_h为空的判定条件是A。
A.Lk_h==NULL B.Lk_h->Next==NULL
C.Lk_h->Next==Lk_h D.Lk_h!
=NULL
3.带表头结点的单链表Lk_h为空的判定条件是B。
A.Lk_h==NULL B.Lk_h->Next==NULL
C.Lk_h->Next==Lk_h D.Lk_h!
=NULL
4.往一个顺序表的任一结点前插入一个新数据结点时,平均而言,需要移动B个结点。
A.n B.n/2 C.n+1 D.(n+1)/2
5.在一个单链表中,已知qtr所指结点是ptr所指结点的直接前驱。
现要在qtr所指结点和ptr所指结点之间插入一个rtr所指的结点,要执行的操作应该是C。
A.rtr->Next=ptr->Next; ptr->Next=rtr;
B.ptr->Next=rtr->Next;
C.qtr->Next=rtr; rtr->Next=ptr;
D.ptr->Next=rtr; rtr->Next=qtr->Next;
6.在一个单链表中,若现在要删除ptr指针所指结点的直接后继结点,则需要执行的操作是A。
A.ptr->Next=ptr->Next->Next;
B.ptr=ptr->Next;ptr->Next=ptr->Next->Next;
C.ptr=ptr->Next->Next;
D.ptr->Nextptr;
7.在长度为n的顺序表中,往其第i个元素(1≤i≤n)之前插入一个新的元素时,需要往后移动B个元素。
A.n-i B.n-i+1 C.n-i-1 D.i
8.在长度为n的顺序表中,删除第i个元素(1≤i≤n)时,需要往前移动A个元素。
A.n-i B.n-i+1 C.n-i-1 D.i
9.设tail是指向一个非空带表头结点的循环单链表的尾指针。
那么,删除链表起始结点的操作应该是D。
A.ptr=tail; B.tail=tail->Next;
tail=tail->Next; free(tail);
free(ptr);
C.tail=tail->Next->Next; D.ptr=tail->Next->Next;
Free(tail); tail->Next->Next=ptr->Next;
Free(ptr); free(ptr);
10.在单链表中,如果指针ptr所指结点不是链表的尾结点,那么在ptr之后插入由指针qtr所指结点的操作应该是B。
A.qtr->Next=ptr; B.qtr->Next=ptr->Next;
ptr->Next=qtr; ptr->Next=qtr;
C.qtr->Next=ptr->Next; D.ptr->Next=qtr;
ptr=qtr; qtr->Next=ptr;
三、问答
1.试问,如下的线性表:
L=(29,25,21,17,13,11,7,5,3,1)
是有序线性表还是无序线性表?
答:
L是一个有序线性表。
2.线性表L第i个存储结点ai的起始地址LOC(ai)可以通过下面的公式计算得到:
LOC(ai)=LOC(ai-1)+k
其中k表示存储结点的长度。
这个公式对吗?
为什么?
答:
这个公式是对的,因为第i个存储结点ai的起始地址LOC(ai),实际上就是等于第i-1个存储结