数据结构第1章绪论习题解析.docx
- 文档编号:29299074
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:23
- 大小:27.29KB
数据结构第1章绪论习题解析.docx
《数据结构第1章绪论习题解析.docx》由会员分享,可在线阅读,更多相关《数据结构第1章绪论习题解析.docx(23页珍藏版)》请在冰豆网上搜索。
数据结构第1章绪论习题解析
《数据结构》第一章绪论部分习题
一、选择题
1.下面说法错误的是。
(1)算法原地工作的含义是指不需要任何额外的辅助空间。
(2)在相同的规模n下,复杂度O(n)的撒在时间上总是优于复杂度O(2n)的算法。
(3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界。
(4)同一个算法,实现语言的级别越高,执行效率越低。
A、
(1)B、
(1)
(2)C、
(1)(4)D、(3)
2.一个递归算法必须包括。
A、递归部分B、终止条件和递归部分
C、迭代部分D、终止条件和迭代部分
3.数据的包括查找、插入、删除、更新、排序等操作类型。
A、存储结构B、逻辑结构
C、基本运算D、算法描述
4.在数据结构中,从逻辑上可以把数据结构分成。
A、动态结构和静态结构B、紧凑结构和非紧凑结构
C、线性结构和非线性结构D、内部结构和外部结构
5.与数据元素本身的形式、内容、相对位置、个数无关的是数据的。
A、存储结构B、存储实现C、逻辑结构D、运算实现
6.通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着。
A、数据具有同一特点
B、不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致
C、每个数据元素都一样
D、数据元素所包含的数据项的个数要相等
7.以下说法正确的是。
A、数据元素是数据的最小单位
B、数据项是数据的基本单位
C、数据结构是带有结构的各数据项的集合
D、一些表面上很不相同的数据可以有相同的逻辑结构
8.以下说法错误的是。
A、程序设计的实质是数据处理
B、数据的逻辑结构是数据的组织形式,基本运算规定了数据的基本操作方式
C、运算实现是完成运算功能的算法或这些算法的设计
D、数据处理方式总是与数据的某种相应表示形式相联系,反之亦然
9.下列程序段的时间复杂度为。
x=n;
y=0;
while(x>=(y+1)*(y+1))
y=y+1;
A、O(n)B、O(n1/2)C、O
(1)D、O(n2)
10.下列叙述中有关好的编程风格的正确描述是。
A、程序中的注释是可有可无的
B、对递归定义的数据结构不要使用递归过程
C、过程应是自封闭的,尽量少使用全程变量
D、多采用一些技巧以提高程序的运行效率
二、填空题
1.一个算法有5个特性:
有穷性、确定性、可行性、有零个或多个输入、有一个或多个输出。
2.算法的时间复杂度是指该算法所求解问题规模(或频度)的函数。
3.算法的可行性是指每一条指令都应在有限的时间内完成。
4、线性结构的特征:
逻辑上满足有且仅有一个开始结点和一个终端结点,且其余结点有且仅有唯一的一个直接前趋和一个直接后继。
5.数据的存储结构被分为顺序、链接、索引存储和散列存储4种。
6.从逻辑关系上讲数据结构主要分为两大类,它们是线性结构 和 非线性结构 。
三、给出下列算法的时间复杂度。
1、Sum(intn)
{
intsum=0,i,j;
for(i=1;i<=n;i++)
{
p=1;
for(j=1;j<=i;j++)
p=p*j;
sum=sum+p;
}
return(sum);
}
T(n)=O(n2)
2、j=1;
while(j<=n)
{j=j*2;
}
T(n)=O(log2n)
7.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。
则采用( )存储方式最节省运算时间。
【北京理工大学2000一、1(2分)】
A.单链表 B.双链表 C.单循环链表 D.带头结点的双循环链表
8.静态链表中指针表示的是( ).【北京理工大学2001六、2(2分)】
A.内存地址 B.数组下标 C.下一元素地址 D.左、右孩子地址
9.链表不具有的特点是( )【福州大学1998一、8(2分)】
A.插入、删除不需要移动元素 B.可随机访问任一元素
C.不必事先估计存储空间 D.所需空间与线性长度成正比
10.下面的叙述不正确的是( )【南京理工大学1996一、10(2分)】
A.线性表在链式存储时,查找第i个元素的时间同i的值成正比
B.线性表在链式存储时,查找第i个元素的时间同i的值无关
C.线性表在顺序存储时,查找第i个元素的时间同i的值成正比
D.线性表在顺序存储时,查找第i个元素的时间同i的值无关
11.线性表的表元存储方式有(
(1))和链接两种。
试指出下列各表中使用的是何种存储方式:
表1是(
(2))存储方式;表2是((3))存储方式;表3是((4))存储方式;表4是((5))存储方式。
表左的s指向起始表元。
供选择的答案:
A.连续 B.单向链接 C.双向链接 D.不连接 E.循环链接
【上海海运学院1995二、1(5分)】
12.
(1)静态链表既有顺序存储的优点,又有动态链表的优点。
所以,它存取表中第i个元素的时间与i无关。
(2)静态链表中能容纳的元素个数的最大数在表定义时就确定了,以后不能增加。
(3)静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。
以上错误的是( )【南京理工大学2000一、3(1.5分)】
A.
(1),
(2) B.
(1) C.
(1),
(2),(3) D.
(2)
13.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为( )(1Rlink=p;p->Llink->Rlink=q;q->Llink=q;
B. p->Llink=q;p->Llink->Rlink=q;q->Rlink=p;q->Llink=p->Llink;
C. q->Rlink=p;q->Llink=p->Llink;p->Llink->Rlink=q;p->Llink=q;
D. q->Llink=p->Llink;q->Rlink=q;p->Llink=q;p->Llink=q;
24.在单链表指针为p的结点之后插入指针为s的结点,正确的操作是:
( )。
A.p->next=s;s->next=p->next; B.s->next=p->next;p->next=s;
C.p->next=s;p->next=s->next; D.p->next=s->next;p->next=s;
【青岛大学2001五、3(2分)】
25.对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是( )
A.head==NULL B.head→next==NULL C.head→next==head D.head!
=NULL
【北京工商大学2001一、5(3分)】
26.在双向链表存储结构中,删除p所指的结点时须修改指针( )。
A.(p^.llink)^.rlink:
=p^.rlink (p^.rlink)^.llink:
=p^.llink;
B.p^.llink:
=(p^.llink)^.llink (p^.llink)^.rlink:
=p;
C.(p^.rlink)^.llink:
=p p^.rlink:
=(p^.rlink)^.rlink
D.p^.rlink:
=(p^.llink)^.llink p^.llink:
=(p^.rlink)^.rlink;
【西安电子科技大学1998一、1(2分)】
27.双向链表中有两个指针域,llink和rlink分别指向前趋及后继,设p指向链表中的一个结点,现要求删去p所指结点,则正确的删除是( )(链中结点数大于2,p不是第一个结点)
A.p^.llink^.rlink:
=p^.llink; p^.llink^.rlink:
=p^.rlink; dispose(p);
B.dispose(p); p^.llink^.rlink:
=p^.llink; p^.llink^,rlink:
=p^.rlink;
C.p^.llink^.rlink:
=p^.llink; dispose(p); p^.llink^.rlink:
=p^.rlink;
D.以上A,B,C都不对。
【南京理工大学1997一、1(2分)】
二、判断
1.链表中的头结点仅起到标识的作用。
( )【南京航空航天大学1997一、1(1分)】
2.顺序存储结构的主要缺点是不利于插入或删除操作。
( )【南京航空航天大学1997一、2(1分)】
3.线性表采用链表存储时,结点和结点内部的存储空间可以是不连续的。
( )
【北京邮电大学1998 一、2(2分)】
4.顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好。
( )
【北京邮电大学2002一、2(1分)】
5.对任何数据结构链式存储结构一定优于顺序存储结构。
( )【南京航空航天大学1997一、3(1分)】
6.顺序存储方式只能用于存储线性结构。
( )
【中科院软件所1999六、1-2(2分)】【上海海运学院1997一、1(1分)】
7.集合与线性表的区别在于是否按关键字排序。
( )【大连海事大学2001一、5(1分)】
8.所谓静态链表就是一直不发生变化的链表。
( )【合肥工业大学2000二、1(1分)】
9.线性表的特点是每个元素都有一个前驱和一个后继。
( )【合肥工业大学2001二、1(1分)】
10.取线性表的第i个元素的时间同i的大小有关.( )【南京理工大学1997二、9(2分)】
11.循环链表不是线性表.( )【南京理工大学1998二、1(2分)】
12.线性表只能用顺序存储结构实现。
( )【青岛大学2001四、2(1分)】
13.线性表就是顺序存储的表。
( )【青岛大学2002一、1(1分)】
14.为了很方便的插入和删除数据,可以使用双向链表存放数据。
( )
【上海海运学院1995一、1(1分)】 【上海海运学院1997一、2(1分)】
15.顺序存储方式的优点是存储密度大,且插入、删除运算效率高。
( )
【上海海运学院1996一、1(1分)】 【上海海运学院1999一、1(1分)】
16.链表是采用链式存储结构的线性表,进行插入、删除操作时,在链表中比在顺序存储结构中效率高。
( ) 【上海海运学院1998一、2(1分)】
三、填空
1.当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用_______存储结构。
【北方交通大学2001二、4】
2.线性表L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是________。
【北方交通大学2001二、9】
3.设单链表的结点结构为(data,next),next为指针域,已知指针px指向单链表中data为x的结点,指针py指向data为y的新结点,若将结点y插入结点x之后,则需要执行以下语句:
_______;______;【华中理工大学2000一、4(2分)】
4.在一个长度为n的顺序表中第i个元素(11DOBEGINp:
=p^.link; i:
=i-1 END;
(D)___;
WHILE jp^.pre^.freq DO p:
=p^.pre;
IF pq THEN [(3)______]
];
IF(4)_THEN[q^.next:
=p,q^.pre;=p^.pre;p^.pre^.next:
=q; p^.pre:
=q]
return(q);
END;【北京工业大学1999五(12分)】
29.循环链表a和b的结点值为字母,其中a表非递减有序,下面的程序欲构造一个递增有序的循环链表c,其中结点的值为同时在a,b两链表中出现的字母,且c中字母不重复,请补上程序中空缺的部分,并估计算法的时间复杂度。
(设a,b的结点数分别为m,n)
TYPE
link=^node;
node=RECORD
key:
char; next:
link
END;
PROC jj(a,b:
link;VAR c:
link);
VAR p,q,r,s:
link;
BEGIN
new(c);c^.next:
=c; q:
=a; p:
=a^.next;
WHILE paDO
[
(1)___;
WHILE p^.key=p^.next^.key DO [q:
=p; p=p^.next];{跳过相同字母}
r:
=b^.next;
(2)_____;
WHILE r^.keyp^.keyDOr:
=r^.next;
IF rb THEN
[s:
=p; q^.next:
=p^.next; (3) ;
s^.next:
=c^.next; c^.next:
=s; c:
=s]
ELSE[q:
=p; p:
=p^.next]
]; c:
=c^.next;
END;
算法时间复杂度为O(4)___ 【北京工业大学2000四(15分)】
30.以下程序的功能是实现带附加头结点的单链表数据结点逆序连接,请填空完善之。
voidreverse(pointerh)
/*h为附加头结点指针;类型pointer同算法设计第3题*/
{pointerp,q;
p=h->next; h->next=NULL;
while(
(1)________)
{q=p;p=p->next;q->next=h->next;h->next=
(2)________; }
}【西南交通大学2000一、9】
31.下面是用c语言编写的对不带头结点的单链表进行就地逆置的算法,该算法用L返回逆置后的链表的头指针,试在空缺处填入适当的语句。
void reverse(linklist&L){
p=null;q=L;
while(q!
=null)
{
(1) ; q->next=p;p=q;
(2)___ ;}
(3)_____;
}【北京理工大学2001九、1(6分)】
32.下面程序段是逆转单向循环链表的方法,p0是原链表头指针,逆转后链表头指针仍为p0。
(可以根据需要增加标识符)
p:
=p0; q0:
=NIL;
WHILE
(1)________DO
BEGIN
(2)________;(3)________;(4)______;(5)________ END;
p^.next:
=q0; p0^.next:
=p; p0:
=p;【中国人民大学2000二、1(4分)】
33.一个无头结点的线性链表(不循环)有两个域。
数据域data,指针域next,链首head,下面算法用read(num)读入数据,当num小于0时,输入结束。
建立一个数据以递增序组成的链表。
PROC insert(head,x);
{在链首为head的表中按递增序插入x}
new(r);r^.data:
=x;
IFhead=NIL
THEN[head:
=
(1)_____;r^.next:
=
(2)________]
ELSEIF(3)___THEN[r^.next:
=head; head:
=r]
ELSE [p:
=head;
WHILE(4)___ AND (p^.next≠NIL)DO[q:
=p;(5)___ ];
IF(6)___ THEN[q^.next:
=(7)___;r^.next:
=(8)____;]
ELSE[p^.next:
=(9)____;r^.next:
=(10)___; ]
]
ENDP;
PROC creat(head);
head:
=(11)______;read(num);
WHILE num>0 DO
[insert(head,num);read(num)]
ENDP;【南京理工大学1999三、4(11分)】
34.一元稀疏多项式以循环单链表按降幂排列,结点有三个域,系数域coef,指数域exp和指针域next;现对链表求一阶导数,链表的头指针为ha,头结点的exp域为–1。
derivative(ha)
{q=ha; pa=ha->next;
while(
(1)_______)
{if(
(2)____){((3)__);free(pa); pa=((4)_); }
else{pa->coef((5)___);pa->exp((6)___);q=((7)__);}
pa=((8)________);
}
} 【南京理工大学2000三、3(10分)】
35.下面是删除单链表L中最大元素所在结点的类PASCAL语言算法,请在横线填上内容,完成其功能。
TYPE pointer=↑node;
node=RECORD
data:
integer; next:
pointer
END;
PROCEDUREdelmax(L:
pointer);
VAR p,q,r:
pointer;m:
integer;
BEGIN
r:
=L;p:
=L↑.next;
IF pNIL THEN
[m:
=p↑.data;
(1)________; p:
=p↑.next;
WHILEpNILDO
[IF
(2)________THEN [(3)________; m:
=p↑.data;]
(4)________;p:
=p↑.next;
]
q:
=r↑.next;(5)______;dispose(q);
]
END;【北京科技大学1998二】
36.对单链表中元素按插入方法排序的C语言描述算法如下,其中L为链表头结点指针。
请填充算法中标出的空白处,完成其功能。
typedefstructnode
{intdata; structnode*next;
}linknode,*link;
voidInsertsort(linkL)
{linkp,q,r,u;
p=L->next;
(1)______;
while(
(2)________)
{r=L; q=L->next;
while((3)________&&q->datadata){r=q;q=q->next;}
u=p->next; (4)______; (5)______; p=u;
}
}【北京科技大学2001二(10分)】
37.下面是一个求两个集合A和B之差C=A-B的程序,即当且仅当e是A的一个元素,但不是B中的一个元素时,e才是C中的一个元素。
集合用有序链表实现,初始时,A,B集合中的元素按递增排列,C为空;操作完成后A,B保持不变,C中元素按递增排列。
下面的函数append(last,e)是把值为e的新结点链接在由指针last指向的结点的后面,并返回新结点的地址;函数difference(A,B)实现集合运算A-B,并返回表示结果集合C的链表的首结点的地址。
在执行A-B运算之前,用于表示结果集合的链表首先增加一个附加的表头结点,以便新结点的添加,当A-B运算执行完毕,再删除并释放表示结果集合的链表的表头结点。
程序(a)(编者略去这个PASCAL程序)
程序(b)
typedefstructnode{intelement; structnode*link;
}NODE;
NODE *A,*B,*C;
NODE *append(NODE*last,inte)
{ last->link=(NODE*)malloc(sizeof(NODE));
last->link->element=e;
return(last->link);
}
NODE*difference(NODE*A,NODE*B)
{NODE*C,*last;
C=last=(NODE*)malloc(sizeof(NODE));
while
(1)___
if(A->elementelement){last=append(last,A->element); A=A->link; }
else if
(2)___{A=A->link; B=B->link; }ELSE (3)___;
while(4)__
{last=append(last,A->element);A=A->link; }
(5)___; last=C; C=C->link; free(last); return(C);
}
/*callform:
C=difference(A,B);*/【上海大学2000一、4(10分)】
四 应用题
1.线性表有两种存储结构:
一是顺序表,二是链表。
试问:
(1)如果有n个线性表同时并存,并且在处理过程中各表的长度会动态变化,线性表的总数也会自动地改变。
在此情况下,应选用
9.在单链表和双向链表中,能否从当前结点出发访问到任何一个结点?
【西安电子科技大学1999计应用一、1(5分)】
10.如何通过改链的方法,把一个单向链表变成一个与原来链接方向相反的单向链表?
【中国人民大学2001二、4(2分)】
11.下面是一算法的核心部分,试说明该算法的功能。
pre:
=L↑.next;
{L是一单链表,结点有数据域data和指针域next}
IF preNIL THEN
WHILE pre↑.nextNILDO
BEGINp:
=pre
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 绪论 习题 解析