数据结构习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)的结果各是什么?