数据结构期末习题答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一,选择题
3•算法分析的两个主要方而就是()
A. 正确性与简单性 B •可读性与文档性
A.问题的规模 B 、待处理数据的初态 C. A 与B 6 •—个算法应该就是( )。

A.程序
B.问题求解步骤的描述
C.要满足五个基本特性 D ・A 与C 、 7. 下而关于算法说法错误的就是()
A 、 算法最终必须由计算机程序实现
B 、 为解决某问题的算法同为该问题编写的程序含义就是相同的
C 、 算法的可行性就是指指令不能有二义性
D 、以上几个都就是错误的 8. 从逻辑上可以把数据结构分为()两大类。

A.动态结构、静态结构
B.顺序结构、链式结构
C.
线性结构、非线性结构 D.初等结构、构造型结构
9. 程序段 for ( i=n-l;i>=l;i —)
for (j=lj<=i ;j++) if ( A[j]>A[j+l])
A[j]与 A[j+1]对换;
其中n 为正整数,则最后一行的语句频度在最坏情况下就是()
A. 0(n )
B. O (nlogn ) C 、.0(2)
D.O (n 2) 10. 连续存储设计时,存储单元的地址()。

A.—立连续B •—立不连续C •不一泄连续D •部分连续,部分不连续 二,判断题
1•数据结构的抽象操作的立义与具体实现有关。

()
2. 数据结构就是数据对象与对象中数据元素之间关系的集合。

3. 在顺序存储结构中,有时也存储数据结构中元素之间的关系。

()
4 •数据的逻辑结构就是指各数据元素之间的逻辑关系,就是用戸按使用的需要建立的。

5. 算法与程序原则上没有区别,在讨论数据结构就是两者就是通用的。

6. 同一数据逻辑结构中的所有数据元素都具有相同的特性就是指数拯元素所包含的数据项 的个数都相等。

7. 数据的逻辑结构与数据元素本身的内容与形式无关。

8. 算法的优劣与算法描述语言无关,但与所用计算机有关。

()
9. 健壮的算法不会因非法的输入数据而出现莫需其妙的状态。

()
10. 算法可以用不同的语言描述,如果用C 语言或PASCAL 语言等高级语言来描述,则算法实 第一章绪论
1 •组成数据的基本单位就是

A.
数据项 B.数据类型 2. 数据结构就是研究数据的( C.数据元素 D.数据变量 )以及它们之间的相互关系。

B. 理想结构•抽象结构 D.抽象结构,逻辑结构
C. 数据复杂性与程序复杂性 4. 算法分析的目的就是()。

A.找岀数据结构的合理性
C.分析算法的效率以求改进 5、 算法的时间复杂度取决于(
D. 时间复杂度与空间复杂度
B. 研究算法中的输入与输出的关系 D.分析算法的易懂性与文档性
D.以上都不就是
际上就就是程序了。

()
一•选择题
三,填空
1 •数据的物理结构包括________ 的表示与________ 的表示。

2.对于给定的n个元素,可以构造岀的逻辑结构有 _____ , ______ , ____ ,—一四种。

3.一个数据结构在计算机中_______ 称为存储结构。

4.抽象数据类型的左义仅取决于它的一组而与—「无关,即不论英内部结构如何
变化,只要它的—_不变,都不影响其外部使用。

5. __________________________ 线性结构中元素之间存在___________ 关系,树形结构中元素之间存在___________________ 关系,图形结构中
元素之间存在________ 关系。

6. _______________________ —个算法有5个特性: 、、,有零个或多个输入、有一个或多个输出。

7.已知如下程序段
for (i= n;i<=l;i++) {语句1}
x:=x+l;
for( j=n;j<=i ;j++)
y:=y+i;{语句2} {语句3} {语句4}
语句1执行的频度为 _______ ;语句2执行的频度为_;语句3执行的频度为_;语句
4执行的频度为_____ 。

8. _________________________________________ 在下而的程序段中,对x的赋值语句的频度为_________________________________________ 俵示为n的函数) for(i = l;i<=n;i++)
for(j= 1 ;j<=i;j++) for(k=l;k<=j;j 卄)
x = x +delta;
9、计算机执行下而的语句时,语句s的执行次数为_________
for (i=l; i<n-l; i++)
for(j=n; j>=i; j—)
10、下而程序段的时间复杂度为 _________ . (n>l)
sum=l; for (i=0;sum<n;i++) sum+=l;
三,填空题
1.数据元素数据元素间关系
2.集合线性结构树形结构图状结构或网状结构
3.表示(又称映像)。

4.逻辑特性在计算机内部如何表示与实现数学特性
5.一对一一对多多对多
6.有穷性确立性可行性
7.n+1 n n(n+3)/2 n(n+l)/2
8.1+ (1+2++ (1+2+3) +•••+ (1+2+—+n) =n(n+1) (n+2)/6 0(n3)
9.(n+3)(n-2)/2
10.0(n)
四,应用题
1.什么就是数据?它与信息就是什么关系?
2•什么就是数据结构?数据结构就是研究什么内容的学科?有关数据结构的讨论涉及哪三方而?
3.评价一个好的算法,从哪几方而考虑?
4.若将数据结构肚义为一个二元组(D, R),说明符号D,R应分别表示什么?
5.解释算法与程序的区别?
6.有下列几种用二元组表示的数据结构,画岀它们分别对应的逻辑图形表示,并指出它们分别属于何种结构。

⑴A=(K,R),其中:
K={a,b,cdc,f,g}
R=(r}
r={ (a.b) , (b,c> , <c,d> , (d.e) , <e,f) ,〈f,g〉}
(2)B=(K.R),其中:
K={ab:d.c,f,g.h}
R=(r}
r={〈d,b〉,<d.g> ,〈d、a〉,〈b.c〉,(g,e> ,〈g,h〉,<a,f) }
⑶C=(K.R),其中:
K={ 123,4,5.6}
R={r}
r={(h 2),(2, 3),(2.4),(3,4),(3,5),(3,6),(4,5),(4,6)}
这里的圆括号对表示两结点就是双向的。

7.分析以下程序段的时间复杂度。

(1)
a=O;b=l;®
for(i=2;i〈=n;i++)②
{
s=a+b;③
b=a;④
a=S;⑤
}

inti,j,k;
for(i=0;i <n;i++)①
for(j=0;j <n;j++)②
c[i]U]=O;®
for(k=0;k (n;k++> ④
c[i]|j]=c[i][j]+a[i][k]+b[k]U];⑤
}
8.求下列算法段的语句频度及时间复杂度
(1)
for(i=l; i<=n; i++)
for(j=l;j<=i;j-H-)
x=x+l;
(2)
for (i=l;i<=n;i++)
for (j=l;j<=i;j++)
for ( k=l;k<=j;k++)
x=i+j-k;
四,应用题
1•什么就是信息?广义地讲,信息就就是消息。

宇宙三要素(物质、能量、信息)之一。

它就是现实世界各种事物在人们头脑中的反映。

此外,人们通过科学仪器能够认识到的也就是信息。

信息的特征为:可识别、可存储、可变换、可处理、可传递、可再生、可压缩、可利用、可共享。

什么就是数据?因为信息的表现形式十分广泛,许多信息在计算机中不方便存储与处理, 例如,一个大楼中4部电梯在软件控制下调度与运行的状态、一个商店中商品的在库明细表等,必须将它们转换成数据才能很方便地在计算机中存储、处理、变换。

因此,数脉da⑻就是信息的载体,就是描述客观事物的数、字符、以及所有能输入到讣算机中并被计算机程序识别与处理的符号的集合。

在计算机中,信息必须以数据的形式岀现。

2•数据结构就是指数据以及相互之间的关系。

记为:数据结构={D,R}o其中,D就是某一数据对彖・R就是该对象中所有数据成员之间的关系的有限集合。

数据结构就是一门研究在非数值计算的程序设计问题中,计算机的操作对象及对象间的关系与施加于对象的操作等的学科。

有关数据结构的讨论一般涉及以下三方而的内容:
(1)数据成员以及它们相互之间的逻借关系,也称为数拯的逻辑结构,简称为数据结构;
(2)数据成员及其关系在计算机存储器内的存储表示,也称为数据的物理结构,简称为存储结构;
(3)施加于该数据结构上的操作。

数据的逻辑结构就是从逻辑关系上描述数据■它与数据的存储不就是一码事,就是与计算机存储无关的。

因此,数据的逻借结构可以瞧作就是从具体问题中抽象出来的数据模型,就是数据的应用视图。

数据的存储结构就是逻辑数据结构在讣算机存储器中的实现(亦称为映像),它就是依赖于讣算机的,就是数拯的物理视图。

数据的操作就是左义于数据逻辑结构上的一组运算,每种数据结构都有一个运算的集合。

例如搜索、插入、删除、更新、排序等。

3.评价好的算法有四个方而。

一就是算法的正确性;二就是算法的易读性;三就是算法的健壮性;四就是算法的时空效率(运行)。

4.D就是数据元素的有限集合,S就是D上数据元素之间关系的有限集合。

5.算法就是为了解决某类问题而规左的一个有限长的操作序列。

一个算法必须满足以下五个重要特性:
有穷性确定性可行性有输入有输出
算法与程序的联系与区别:
(1)算法代表了对问题的解,而程序则就是算法在计算机上的特泄的实现。

一个程序不一上满足有穷性。

例如,操作系统,只要整个系统不遭破坏,它将永远不会停止。

因此,操作系统不就是一个算法。

(2)程序中的指令必须就是机器可执行的,而算法中的指令则无此限制。

(3)算法就是而向功能的,通常用而向过程的方式描述;程序可以用而向对象方式搭建它的
框架。

(4)算法与数据结构就是相辅相承的:解决某一特左类型问题的算法可以选左不同的数据结构,而且选择恰当与否直接影响算法的效率。

反之,一种数据结构的优劣由各种算法的执行来体现。

6.(1)A对应逻辑图形如下,它就是一种线性结构。

(2)B对应逻辑图形如下,它就是一种树形结构。

(3)C对应逻辑图形如下,它就是一种图形结构。

7.
⑴解:
语句①的频度就是2;
语句②的频度就是n;
语句③的频度就是n-1;
语句④的频度就是n-1;
语句⑤的频度就是n-1;
故,该程序段的时间复杂度T(n)=2+n+3*(n-1 )=4n-1 =O(n) 0 ⑵解:
语句①的循环控制变量i要增加到n.测试到i=n成立才会终止,故它的频度为n+1:
语句②作为语句①循环体内的语句应该执行n次,但语句②本身要执行n+1次,故语句② 的频度就是n(n+l);
同理可得语句③、④与⑤的频度分别就是n2.n2(n+l)与n3。

该程序段所有语句的频度之与
为:
T(n)=2n3+3n2+2n+l
英复杂度为0 S3)。

8.
(1)分析:该算法为一个二重循环,执行次数为内、外循环次数相乘,但内循环次数不固定,与
外循环有关,因此,时间频度T(n)=l+2+3+・・・+n=n*(n+l)/2。

有l/4WT(n)/£Wl,故它的时间复杂度为0(n3),即T(n)与£数量级相同。

(2)分析算法规律可知时间频度T(n)二1+(1+2) + (1+2+3)+、、、+(l+2+3+・・・+n)。

由于有1/6 W T(n)/ n5 W1,故时间复杂度为O(n')
第二章线性表
一,选择
1.在一个以h为头的单循环链中,p指针指向链尾的条件就是()
A、p->next=h B, p->next=NIL C、p->next->next=h D、p->data=-l
2.下而关于线性表的叙述中,错误的就是哪一个?()
A.线性表采用顺序存储,必须占用一片连续的存储单元。

B.线性表采用顺序存储,便于进行插入与删除操作。

C.线性表采用链接存储,不必占用一片连续的存储单元。

D.线性表采用链接存储,便于插入与删除操作。

3.线性表就是具有n个()的有限序列(n>0)。

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.双向链表中有两个指针域,llink与rlink,分别指向前驱及后继,设p指向链表中的一个结点,q 指向一待插入结点,现要求在P前插入q,则正确的插入为()。

A、p->llink=q; q->rlink=p; p->l1ink->r1ink=q; q->llink=p->llink;
B、q->lli nk=p->11i nk; p->l1ink->r1ink=q; q->rlink=p; p->llink=q->rlink;
C、q->rlinkup; p->rlink=q; p->lli nk->r1i nk=q; q->rlinkup;
D、p->llink->rlink=q; q->rlink=p; q->11i nk=p->1link; p->llink=q;
9.对于一个头指针为head的带头结点的单链表,判迫该表为空表的条件就是()。

A.head—NULL
B. head—"next二二NULL
C. head—"next二二head
D. head! =NULL
10.在顺序表中查找第i个元素的时间效率最高的算法时间复杂度就是()。

A.O(l)
B.O(、厉)
C.O(log2n)
D.O(n)
11•最好的情况下,在顺序表中按值查找一个元素的算法时间复杂度就是()。

A.O(n)
B.O( )
C.O(log2n)
D.O(l)
12、若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间
复杂度为( )(lUi<=n+l)。

A、0(0)
B、0(1)
C、0(n)
D、0(n2)
13、对于顺序存储的线性表,访问结点与增加、删除结点的时间复杂度为()。

扎0(n) 0(n) B、0(n) 0(1) C、0(1) 0(n) D、0(1) 0(1)
14.线性表(al, a2,…,an)以链接方式存储时,访问第i位置元素的时间复杂性为()。

A.0(i)
B.0(l)
C.0(n)
D.O(i-l)
15.非空的循环单链表head的尾结点p满足()°
A. p->link二head
B. p->link二NIL
C. p=NIL
D. p= head
二判断
1、链表中的头结点仅起到标识的作用。

()
2、线性表采用链表存储时,结点与结点内部的存储空间可以就是不连续的。

()
3、顺序存储方式插入与删除时效率太低,因此它不如链式存储方式好。

()
4、顺序存储方式只能用于存储线性结构。

()
5、线性表的链接存储,表中元素的逻辑顺序与物理顺序一立相同。

6、线性表的特点就是每个元素都有一个前驱与一个后继。

()
7、取线性表的第i个元素的时间同i的大小有关。

()
8、循环链表不就是线性表。

()
9、线性表就就是顺序存储的表。

()
三,填空
1.当线性表的元素总数基本稳左,且很少进行插入与删除操作,但要求以最快的速度存取线
性表中的元素时,应采用 _______ 存储结构。

2.线性表L二(al, a2,…,an)用数组表示,假泄删除表中任一元素的概率相同,则删除一个元
素平均需要移动元素的个数就是 ________ 。

3.在一个长度为n的顺序表中第i个元素(l<=i<=n)之前插入一个元素时,需向后移动个元素。

4.对于一个具有n个结点的单链表,在已知的结点*戸后插入一个新结点的时间复杂度为
_______ ,在给窪值为x的结点后插入一个新结点的时间复杂度为__________ 。

5.在双向循环链表中,向p所指的结点之后插入指针f所指的结点,英操作就是 _________ 、
6、在双向链表结构中,若要求在p指针所指的结点之前插入指针为s所指的结点,则需执行下列语句:
s->next=p; s->prior= ____________ : p->prior=s; _________ 二s;
7、顺序存储结构通过______ 表示元素之间的关系;链式存储结构通过__________ 表示元素之间的关系。

8、对于双向链表,在两个结点之间插入一个新结点需修改的指针共 ________ 个,单链表为_______ 个。

9、已知指针p指向单链表L中的某结点,则删除其后继结点的语句就是: ______ ,时间复杂
度就是______ 。

10、带头结点的双循环链表L中只有一个元素结点的条件就是: _________ 。

三,填空
1.顺序
2.(n-l)/2
3 ・ n-i+1
4.0(l),0(n)
5.f->next二p-〉next; f->prior=p; p->next->prior=f; p->next=f;
6.p->prior s->prior->next
7.物理上相邻指针
8.4 2
9.u=p->next; p->next=u->next; free(u); 0(1);
10.L-〉next-〉next二二L
四,算法设计
1.试写一算法在带头结点的单链表结构上实现线性表操作LOCATE(L.X)o
2.试写一算法在带头结点的单链表结构上实现线性表操作LENGTH(L)。

3.试写一算法实现顺序表的就地逆竄即利用原表的存储空间将线性表⑻.a?•…斯)逆置为伽.
Hn-i. .. .,31)o
4.试写一算法,对单链表实现就地逆苣。

5.设线性表A=(ai. a2....,a…),B=(bi. b2....,b…),U写一个按下列规则合并A.B为线性表C的算法,即
使得
c=(ai. bl,am ,bm ,bm+i.…,bn)当m<=n 时;
或者C=(ai. bi.a n ,bn ,a n+i. ...,a n)当m、>n 时;
线性表A.B与C均以单链表作存储结构,且C表利用A表与B表中的结点空间构成。

注意:单链表的长度值m与n均未显式存储。

1.
LMode* Locate (LinkList L, int x)//琏表上的元素查找,返回指针
{
for (p=l->next;p&&p->data!=x;p=p->next);
return p;
}//Locate
2.
int Lcngth(LinkList L)〃求链表的长度
{
for(k=0.p=L;p->next;p=p->next,k++);
return k;
)//Length
3.
void reverse(SqList &A)//顺序表的就地逆置
{
for (i=0,j二A、length-1;i<j;i++, j一一)
A N elem[i]<->Ax elem[j];
}//reverse
4.
void LinkList_reverse(Linklist &L)〃链表的就地逆置;为简化算法,假设表长大于2
{
p=L->next;q=p->next;s=q->next;p->next=NULL;
while(s->next)
{
q->next=p;p=q;
q=s;s=s->ncxt;//把L的元素逐个插入新表表头
}
q->next=p;s->next=q;L->next=s;
}//LinkList_re verse
分析:本算法的思想就是,逐个地把L的当前元素q插入新的链表头部,p为新表表头、5.
void merge 1 (LinkList &A,LinkList &B,LinkList &C)
//把链表A与B合并为C,A与B的元素间隔排列,且使用原存储空间
{
p=A->next;q=B->ncxt;C=A;
while(p &&q)
{ _
s=p->next;p->next=q; tr\各B 的元素插入
if(s)
t=q->next;q->next=s; //如A非空,将A的元素插入
}
p=s ;q=t;
}//while
}//merge 1
第三章栈与队列
一,选择
1、对于栈操作数据的原则就是()。

A 、先进先岀
B 、后进先岀
C 、后进后岀
D 、不分顺序
3、最大容量为n 的循环队列,队尾指针就是rear,队头就是front,则队空的条件就是 ()。

A 、 (rear+1) MOD n=front
B 、 rear=front
D 、 (rear-1) MOD n=front
4当利用大小为n 的数组顺序存储一个栈时,假泄用top= =n 表示栈空,则
向这个栈插入一个元 素时首先应执行 语句修改top 指针。

A.top++
B.top-・
C.top=0
D.top 5、 若已知一个栈的入栈序列就是1, 2, 3,…,n,其输出序列为p s , p :, ps,…,若px 就是n, 则P :就是()。

A. i B 、n-i C 、n-i+1 D 、不确定
6、 一个递归算法必须包括()。

A 、递归部分 B 、终止条件与递归部分
C 、迭代部分
D 、终止条件与迭代 部分
7、 执行完下列语句段后,i 值为:()
int f(int x)
{ return ((x>0) ? x* f (x-1):2);}
int i ;
i 二f(f(l));
A. 2 B 、4 C 、8 D 、无限递归
8、 设栈S 与队列Q 的初始状态为空,元素el, e2, e3, e4, e5与e6依次通过栈S, 一个元素岀 栈后即进队列Q,若6个元素出队的序列就是e2, e4, e3,亡6, e5, el 则栈S 的容量至少应该就 是()。

A. 6 B 、4 C 、3 9、栈与队列的共同点就是()。

A 、都就是先进先岀 10、设计一个判别表达式中左,右括号就是否配对出现的算法,采用()数据结构最佳。

A •线性表的顺序存储结构
B 、队列
C 、线性表的链式存储结构
D.栈 11、用不带头结点的单链表存储队列时,其队头指针指向队头结点,英队尾指针指向队尾结 点,则在进行删除操作时( )o
A.仅修改队头指针
B 、仅修改队尾指针
C 、队头、队尾指针都要修改
D 、队头,队尾指针都可能要修改
12、 递归过程或函数凋用时,处理参数及返回地址,要用一种称为()的数据结构。

C ・ rear+l=front D 、2
B 、都就是先进后出
C 、只允许在端点处插入与删除元素
D 、没有共同点
A.队列
B.多维数组
C.栈D、线性表
13、假设以数组A[m]存放循环队列的元素,其头尾指针分别为front与rear,则当前队列中的元素个数为()。

A・(rear一front-m)%m B・ rear-front+1 C・(front-re3r+in〉%m D・(rear-front)%m
14、循环队列存储在数组A[0、、m]中,则入队时的操作为()。

A、rear=rear+l
B、rear=(rear+1) mod (m-1)
C、rear=(rear+l) mod m
D、rear=(rear+1)mod(m+1)
15、若用一个大小为6的数组来实现循环队列,且当前rear与front的值分别为0与3,当从队列中删除一个元素,再加入两个元素后,rear与front的值分别为多少?()
A、1与5
B、2 与4
C、4 与2
D、5 与1
一,选择
二填空
1. ______ 就是限泄仅在表尾进行插入或删除操作的线性表。

3. _______________________________________________ 中缀表达式3*(x+2)-5所对应的后缀表达式为__________________________________________ ;后缀表达式“45号2+-”的值
为_________ 」
4、顺序栈用dataEl.. n]存储数据,栈顶指针就是top,则值为x的元素入栈的操作就是
5•向一个循环队列中插入一元素时,需首先移动 __________________ •然后再向所抬位置
新插入的元素。

3.用下标0开始的N元数组实现循环队列时,为实现下标变量M加1后在数组有效下标范国
内循坏,可采用的衣达式就是:M= ______
4.用长度为n的数组顺序存储一个栈时,若用top= =n表示栈空,则表示栈满的条件
为_________ 。

二,填空
1栈
33x2 +*5 - 15
4.data[++topj=x;
5.队尾指针写入
6.(M+l) MOD N (M+l)% N;
7.top=0
三,应用题
1•指出下列程序段的功能
(1)void Demol(SeqStack *S){
int i; arr[64]; n=0 ;
while ( StackEmpty(S)) arr[n++]=Pop(S);
for (i=0, i< n; i++) Push(S, arr[i]);
} //Demol
⑵ SeqStack SL S2. tmp;
DalaTypc x;
、、、〃假设栈tmp与S2已做过初始化
while ( ! StackEmpty (&S1))
{
x=Pop(&S 1);
Push(&lmp.x);
}
while (! StackEmpty (&tmp))
{
x=Pop( &tmp);
Push( &Sl,x);
Push( &S2, x);
)
(1)程序段的功能就是将一栈中的元素按反序重新排列,也就就是原来在栈顶的元素放到栈底, 栈底的元素放到栈顶。

此栈中元素个数限制在64个以内。

(2)程序段的功能就是利用tmp栈将一个非空栈si的所有元素按原样复制到一个栈s2当中去。

四,算法设计题
1.回文就是指正读反读均相同的字符序列,如”abba"与”abdba”均就是回文,但”good”不就是回文。

试写一个算法判泄给泄的字符向虽就是否为回文。

(提示:将一半字符入栈)
1 .
根据提示,算法可设计为:
〃以下为顺序栈的存储结构定义
^define StackSize 100 //假定预分配的栈空间最多为100个元素
typedef char DataType;//假定栈元素的数据类型为字符
typedef struct{
DataType data[StackSize];
int top;
/SeqStack;
int IsHuiwen( char *t)
{//判断t字符向呈:就是否为回文,若就是,返回1,否则返回0
SeqStack s;
int i , len;
char temp;
InitStack( &s);
len=strlen(t) ; //求向虽:长度
for ( i=0; i<len/2; i++)//将一半字符入栈
Push( &s, t [i]);
while( !EmptyStack( &s))
{//每弹岀一个字符与相应字符比较
temp 二Pop (&s );
if ( temp!=S[i]) return 0 ;// 不等则返回 0 else i++; }
return 1 ; //比较完毕均相等则返回1
第四章串
一,选择
1 •下而关于串的的叙述中,哪一个就是不正确的?()
A.串就是字符的有限序列
B.空串就是由空格构成的串
C.模式匹配就是串的一种重要运算
D.串既可以采用顺序存储,也可以采用链式存储 2. 设有两个串p 与q ,其中q 就是p 的子串,求q 在P 中首次岀现的位宜的算法称为()
f 二填空
1. 空格串就是指_,其长度等于=_。

2. 组成串的数据元素只能就是 ________ 。

3. __________________ —个字符串中 称为该串的子串。

4. INDEX ( 4DATASTRUCTURE , , 'STR')二 ______ 」
7. 设T 与P 就是两个给世的串,在T 中寻找等于P 的子串的过程称为_.又称P 为, 二填空 1. 由空格字符(ASCII 值32)所组成的字符串 空格个数
2. 字符
3. 任意个连续的字符组成的子序列
4.5 7.模式匹配
模式串
第五章数组与广义表
A.求子串
B.联接
3. 串的长度就是指() 扎串中所含不同字母的个数 C ・串中所
含不同字符的个数 C •匹配 D.求串长 B. 串中所含字符的个数
D.串中所含非空格字符的个数
1、已知广义表L 二((x, y, z), a, (u, t,w)),从L 表中取岀原子项t 的运算就是()。

A 、head(tail (tail(L))) tail(head(head(tail(L)))) C 、head(tail (head(ta 订(L))))
D 、head(tail(head(tail(tail(L)))))
2^ 广义表A 二(a, b, (c, d), (e, (f, g))),则下面式子的值为()。

Head (Tail(Head(Tail(Tail(A))))) A 、 (g)
B 、 (d)
C 、 c D. d
3、 稀疏矩阵一般的压缩存储方法有两种,即()
A.二维数组与三维数组
B.三元组与散列
C.三元组与十字链表
D.散列与十字链表
4、 二维数组A 的每个元素就是由6个字符组成的串,其行下标匸0,1,…,&列下标 j 二1,2. -,10.若A 按行先存储,元素A[& 5]的起始地址与当A 按列先存储时的元素() 的起始地址相同。

设每个字符占一个字节。

A 、A[8,5]
B 、A[3, 10]
C 、A[5,8]
D 、A[0,9]
5、 对稀疏矩阵进行压缩存储目的就是()。

扎便于进行矩阵运算B.便于输入与输出 C.节省存储空间
D.降低运算的时间复杂度
6、 设A 就是n*n 的对称矩阵,将A 的对角线及对角线上方的元素以列为主的次序存放在一
二判断
1、 一个稀疏矩阵茁细采用三元组形式表示,若把三元组中有关行下标与列下标的值互换, 并把m 与n 的值互换,则就完成了觴・n 的转置运算。

()
2、 从逻辑结构上瞧,n 维数组的每个元素均属于n 个向量。

()
3、 稀疏矩阵压缩存储后,必会失去随机存取功能。

()
4、 对长度为无穷大的广义表,由于存储空间的限制,不能在计算机中实现。

()
5、 数组可瞧成线性结构的一种推广,因此与线性表一样可对它进行插入,删除操作。

()
6、 所谓取广义表的表尾就就是返回广义表中最后一个元素。

()
7、 二维以上的数组其实就是一种特殊的广义表。

()
8、 广义表的取表尾运算,其结果通常就是个表,但有时也可就是个单元素值•() 9、 若一个广义表的表头为空表,则此广义表亦为空表。

()
10、 广义表中的元素或者就是一个不可分割的原子,或者就是一个非空的广义表。

() 二,判断
维数组B[l 、、n(n+l)/2]中,对上述任一元素弘(10 且j)在B 中的位置为(
A 、i(i-l)/2+j
B 、j(j-l)/2+i
C 、j(j-l)/2+i-l
D 、i(i-l)/2+j-l
7、A[N,N]就是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组T[N(N+l)/2]中, 则
对任一上三角元素a[i] [j]对应T[k]的下标k 就是(
A. i(i-l)/2+j B ・ j(j-l)/2+i C. i(j-i)/2+l D. j(i-l)/2+l 设广义表L= ((a, b, c)),则L 的长度与深度分别为(
A 、1与 1
B 、1 与3 C> 1
数组A[0、、4,-1、、-3,5、、7]中含有元素的个数( A. 55 B. 45
C. 36
下而说法不正确的就是( )。

A 、广义表的表头总就是一个广义表
C 、广义表难以用顺序存储结构
D 、 )o
8、
9、 10、
C 、
)o
与2 )0 D. 16
D 、 2 与 3
B 、广义表的表尾总就是一个广义表 D 、广义表可以就是一个多层次的结构
四应用题
1、画出下列广义表的两种存储结构图((),A, (B, (C,D)), (E,F))。

2、设某表H如下:
其中A, B, C为子表名,al, a2, bl, cl, c2, x为其元素。

试用广义表形式表示H,并写出运算HEAD(H)与TAIL (H)函数从H中取岀单元素a2的运算;
⑴H(A(a“ aJ,B(b),C(c” cj,x)
HEAD (TAIL (HEAD (H)))=a:
五,算法设计
1.设任意n个整数存放于数组A(l:n)中,试编写程序,将所有正数排在所有负数前而
2、设二维数组a[l、、m, 1、、n]含有m*n个整数。

判断a中所有元素就是否互不相同?输出相关信息(yes/no)。

1、本题属于排序问题,只就是排出正负,不排出大小。

可在数组首屋设两个指针i与j, i自小至大搜索到负数停止,j自大至小搜索到正数停止。

然后i与j所指数据交换,继续以上过程,直到i=j 为止。

void Arrange(int A[], int n)
//n个整数存于数组A中,本算法将数组中所有正数排在所有负数的前而
{int i=0, j二n-l, x; 〃用类C编写,数组下标从0开始
while (i<j)
{while(i<j && A[i]>0) i++;
while(i<j && A[j]<0) j—;
if(i<j) {x 二A[订;A[i++]二A[j]; A[j—]二x; }// 交换A[i]与A[j] }
}//算法Arrange结束、
[算法讨论]对数组中元素各比较一次,比较次数为no最佳情况(已排好,正数在前,负数在后)不发生交换,最差情况(负数均在正数前而)发生n/2次交换。

用类c编写,数组界偶就是0、、n-l o空间复杂度为0(1)、
2、判断二维数组中元素就是否互不相同,只有逐个比较,找到一对相等的元素,就可结论为不
就是互不相同。

如何达到每个元素同其它元素比较一次且只一次?在当前行,每个元素要同本行后而的元素比较一次(下面第一个循环控制变量P的for循环),然后同第i+1行及以后各行元素比较一次,这就就是循环控制变量k与p的二层for循环。

int JudgEqual (ing a[m][n],int m, n)
//判断二维数组中所有元素就是否互不相同,如就是,返回1;否则,返回0。

{for(i=0;i<m;i++)
for(j=0;j<n-l;j++)
{ for(p=j+l;p<n;p++) //与同行其它元素比较
if(a[i][j]二二a[i][p]) {printf( "no" ); return(0); }。

相关文档
最新文档