数据结构习题

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

习题一

一、填空题

1. 算法具有有穷性、确定性、可行性、输入和输出五大特征。

2. 数据结构的内容包括以下三个方面:数据元素、数据关系和运算集合。

3. 数据结构的存储结构分为顺序、链式、索引、散列。

4. 评价算法性能的标准主要从算法执行时间和空间两方面考虑。

5. 在线性结构、树形结构和图状结构中,数据元素之间分别存在着1对1 、1对多和多对多关系。

二、分析题

2.设n为整数,分析下列程序段中,用*标明的语句的语句频度及时间复杂度。(1)for(n =1;n<=10;n++)

*s=s+n;

(2) for(i =1;i<=n;i++)

*s=s+n;

(3) for(i =1;i<=n;i++)

for(j=1;j<=n;j++)

*s=s+n

(4) for(i =1;i<=n;i++)

for(j=1;j<=i ;j++)

*s=s+n;

(5)for(i =1;i<=n;i++)

for(j=1;j<=n;j++)

{

c[i][j]=0;

for(k=1;k<=n;k++)

*c[i][j]=c[i][j]+a[i][k]*b[k][j];

}

习题二

3.填空题

1.在顺序表中,逻辑上相邻的元素,其物理位置上一定相邻。

2.在单链表中,逻辑上相邻的元素,其物理位置上不一定相邻。

3.设单链表中,指针p指向结点s,若要删除s之后的结点(若存在),则需修改指针的操作为P=s->next;s->next=s->next->next;free(p); 。

4.在一个长度为n的顺序表中,如果要删除第i个元素,需移动n-i+1 个元素。

二、选择题

1.某线性表中最常用的操作是存取序号为i的元素和在最后进插入和删除运算,则采用(C )存储方式的时间性能最好。

A.双向链表

B.双向顺环链表

C.顺序表

D.单向顺环链表

2.在一个单链表中,已知q结点是p结点的前驱结点,若在p和q之间插入s结点,则需执行( C )。

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

3.带头结点的单链表为空的判定条件是(B )。

A.L=NULL

B.L->next=NULL

C.L->next=head

D.L!=NULL

4.某线性表中最常用的操作是存取第i元素及其前驱结点的值,则采用(C )存储方式能节省时间。

A双向链表 B.双向循环环链表 C.顺序表 D.单向循环环链表

5.已知一个带头结点的非空循环单链表,其尾指针是R,则其首元素结点的地址为( D )。

A.R->next

B.*(r->next->next)

C.&(r->next->next)

D.R->next->next

三、编程题

6.试将入口为head的有序单链表,按所给关键字k分成两个循环链表。其中,比k小的所有结点组成入口为h1的循环链表,比k大的所有结点组成入口为h2的循环链表。

9.对于单链表,写出下列操作的算法。

(1)根据一维数组建立一个单链表,使单链表中元素的顺序与数组的次序相同。(2)统计单链表中值在x~y之间的所有结点个数。

(3)删除单链表中第k个结点开始连续的j个结点。

(4)将该单链表分解为两个单链表,使其中一个单链表中仅含有奇数,另一个单链表中仅含有偶数。

(5)将另一个已经存在的单链表插入到该链表的第k个结点之后。

(6)将单链表中的所有元素排成一个有序序列。

习题三

4.分析题

1.写出下列程序段的输出结果

void main()

{

stack s;

char x,y;

stackinit(s); \\构造一个空栈s

x=‘c’;

y=‘k’;

push(s,x); \\将新元素x插入到栈s中

push(s,‘a’);

push(s,y);

pop(s,x); \\从栈s中删除顶元x

push(s,‘t’);

push(s,x);

pop(s,‘s’);

push(s,x);

\\判断栈s是否为空,若为空,返回1,否则返回0

While(!stackempty(s))

{

pop(s,y);

printf(y);

}

printf(x);

}

2.写出以下程序段的输出结果。

void main()

{

queue q;

char x=‘e’;

char y=‘c’;

queinit(q); //构造一个空队列q

enque(q,‘h’); //将元素h到队q的尾部

enque(q,‘r’);

enque(q,y);

deque(q,x); //删除队q的队首元素x

enque(q,x);

deque(q,x);

enque(q,‘a’);

while(! queempty(q))//当队q非空

{

deque(q,y);

rintf(y);

}

printf(x);

}

习题四

一、填空题

1. 串是一种特殊的线性表,其特殊性表现在。

2. 串的最基本的两种存储方式为:

和。

3. 两个字符串相等的充分必要条件是。

二、串的基本运算题

1. 设串a=”very”,b=”good”,c=”I am a student”

(1) 调用函数Concat(a,b)和Concat(b,a)的结果各是什么

(2) 调用函数Concat(a,Concat(b,c))和Concat(Concat(a,b),c)的结果各是什么

(3) 调用函数SubString(c,3,1)和SubString(c,1,3)的结果各是什么

(4) 调用函数StrInsert(c,5,b)和StrInsert(b,5,c)的结果各是什么

(5) 调用函数I ndex(c,’am’)和I ndex(c,’AM’)的结果各是什么?

(6) 调用函数R eplace(c,’a’,a)的结果各是什么?

相关文档
最新文档