数据结构习题2Word格式.docx
- 文档编号:20434668
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:11
- 大小:138.31KB
数据结构习题2Word格式.docx
《数据结构习题2Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构习题2Word格式.docx(11页珍藏版)》请在冰豆网上搜索。
B.以链接方法存储
C.以顺序方法存储,且结点接关键字有序排列
D.以链接方法存储,且结点接关键字有序排列
12.在顺序存储的线性表(aian)中,删除任意一个结点所需移动结点的平均移动次数为(C)
A.nB.n/2C.(n-1)/2D.(n+l)/2
13.在线性表的下列存储结构中,读取元素花费的时间最少的是(D)。
A.单链表B.双链表C.循环链表D.顺序表
14.若某链表中最常用的操作为在最后一个结点之后插入一个结点和删除最后一个结点,则采用(D)存储方式最节省时间。
A.双链表B.单链表C.单循环链表D.带头结点的双循环链表
二、填空题
1线性表(LinearList)是最简单、最常用的一种数据结构。
线性表中的元素存在着—
一对一的相互关系。
2•线性表中有且仅有一个开始结点,表中有且仅有一个终端结点,除开始结点外,其他每个元素有巨仅有一个直接前驱,除终端结点外,其他每个元素有且仅有一个直接后继
3•线性表是n(n>
=0)个数据元素的_有限序列。
其中n为数据元素的个数,定义为线性表的长度。
当n为零时的表称为空表。
4•所谓顺序表(SequentialLISt)是线性表的顺序存储结构,它是将线性表中的结点按其逻辑顺序依次存放在内存中一组连续的存储单元中,使线性表中相邻的结点存放在地址相
邻的存储单元中。
5.单链表不要求逻辑上相邻的存储单元在物理上也一定要相邻。
它是分配一些任意的
存储单元来存储线性表中的数据元素,这些存储单元可以分散在内存中的任意的位置上,它
们在物理上可以是一片连续的存储单元,也可以是不连续的。
因此在表示线性表这种数据结
构时,必须在存储线性表元素的同时,也存储线性表的逻辑关系。
6•线性表的链式存储结构的每一个结点(Node)需要包括两个部分:
一部分用来存放
元素的数据信息,称为结点的数据域;
另一部分用来存放元素的指向直接后继元素的指针(即
直接后继元素的地址信息),称为指针域或链域。
7•线性链表的逻辑关系是通过每个结点指针域中的指针来表示的。
其逻辑顺序和物理存储顺序不再一致,而是一种非顺序存储结构,又称为非顺序映像。
&
如果将单链表最后一个结点的指针域改为存放链表中的头结点的地址值,这样就构成了循环链表
。
9•为了能够快速地查找到线性表元素的直接前驱,可在每一个元素的结点中再增加一个指向其前驱的指针域,这样就构成了双向链表。
10.双向链表某结点的指针P,它所指向结点的后继的前驱与前驱的后继都是p所指向
的结点本身。
11在单链表中,删除指针P所指结点的后继结点的语句是P->
next=p->
next-〉next
12.在双循环链表中,删除指针P所指结点的语句序列是P->
prior->
next=p->
next及
P->
next->
prior=P->
prior。
13.单链表是线性表的链接存储表示。
14.可以使用双链表表示树形结构。
15.向一个长度为n的向量的第i个元素(l<
i<
n+1)之前插人一个元素时,需向后移
动n-i+1个元素。
16.删除一个长度为n的向量的第i个元素(I<
i<
n)时,需向前移动n-i
个元素。
17.在单链表中,在指针P所指结点的后面插人一个结点S的语句序列是
S->
next=P->
next;
P->
next=S
18.在双循环链表中,在指针P所指结点前插人指针S所指的结点,需执行语句
p->
prior->
next=S;
s>
prior=p>
prior;
next=p;
prior=s;
19.取出广义表A=((x,(a,b,c,d))中原子c的函数是
head(tail(tail((head(tail(head(A))))))。
20.在一个具有n个结点的有序单链表中插人一个新结点并使之仍然有序的时间复杂度为0(n)。
21.写出带头结点的双向循环链表L为空表的条件(L==L->
Next)&
(L==L->
Prior)
22.线性表、栈和队列都是线性_结构。
23.向栈中插人元素的操作是先移动栈顶针,再存人元素。
三、判断题
1.线性表采用链表存储时,结点和结点内部的存储空间可以是不连续的。
(错)
2•在具有头结点的链式存储结构中,头指针指向链表中的第一个数据结点。
3•顺序存储的线性表不可以随机存取。
4•单链表不是一种随机存储结构。
(对)
(错)
5•顺序存储结构线性表的插入和删除运算所移动元素的个数与该元素的位置无关。
6.顺序存储结构是动态存储结构,链式存储结构是静态存储结构。
7.线性表的长度是线性表所占用的存储空间的大小。
双循环链表中,任意一结点的后继指针均指向其逻辑后继。
9•线性表的惟一存储形式是链表。
四、综合题
1•编写一个将带头结点单链表逆置的算法。
voidreverse_list(linklist*head)
{—
/*逆置带头结点的单链表*/
linklist*s,*p;
2.ha和hb分别是两个按升序排列的、带头结点的单链表的头指针,设计一个算法,把这两个单链表合并成一个按升序排列的单链表,并用hC指向它的头结点。
linklist*combine_list(linklist*ha,
linklist*hb)
{
/*ha,hb分别是两个按升序排列的,带有头结点的单链表的头指针,设计一个算法,把这两个单链表合并成一个按升序排列的单链表,并用he指向它的头结点*/
linklist*he,*pa,*pb,*pe,*p,*q,*r;
he=(linklist
*)malloe(sizeof(linklist));
/*建立he头
结点*/
p=he;
pa=ha->
next;
free(ha);
/*释放ha头结点*/
pb=hb->
free(hb);
/*释放hb头结点*/
while(pa!
=NULL&
pb!
=NULL)
q=(linklist*)malloe(sizeof
(linklist));
/*产生新结点*/
if(pb->
data<
pa->
data)
q->
data=pb->
data;
pb=pb->
}
else
data=pa->
pa=pa->
if(pa->
data==pb->
data)/*将相同的
元素删除*/
r=pb;
free(r);
3.有一个带头结点的单链表,头指针为head,编写一个算法count.list()计算所有
数据域为X的结点的个数(不包括头结点)。
intcount_list(linklist*head)
/*在带头结点的单链表中计算所有数据域为x的结点的个数*/
linklist*p;
intn;
p=head->
/*p指向链表的第一个结点*/
n=0;
while(p!
=NULL)
if(p->
data==x)
n++;
p=p->
return(n);
/*返回结点个数*/
}/*count_list*/
4.在一个带头结点的单链表中,头指针为head,它的数据域的类型为整型,而且按由小到大的顺序排列,编写一个算法insertx—list(),在该链表中插人值为x的元素,并使该链表仍然有序linklist*insertx_list(linklist*head,intx)
/*在带头结点的单链表中插入值为x的元素,使该链表仍然有序*/
linklist*s,*p,*q;
s=(linklist
*)malloc(sizeof(linklist));
/*建立数据域
为x的结点*/
s->
data=x;
next=NULL;
if(head->
next==NULL||
x<
head->
data)/*若单链表为空或x小于链表第一个结点的数据域*/
next=head->
next=s;
q=head->
p=q->
while(p!
=NULL&
x>
data){
q=p;
p=p->
next=p;
}/*if*/
}/**insertx_list*/
5.在一个带头结点的单链表中,head为其头指针,p指向链表中的某一个结点,编写算法swapin.list(),实现p所指向的结点和p的后继结点相互交换。
linklist*swapin_list(linklist*head,
linklist*p)
/*在带头结点的单链表中,实现p所指向的结点和
p的后继结点相互交换*/
为p的后继*/
若p有后继结点*/
若p指向头结点*/
linklist*q,*r,*s;
q=p->
/*qif(q!
=NULL)/*{
if(p==head)/*{
head=head->
s=head->
p->
else/*p不指向头结点*/
r=head;
/*定位p所指向结点的前驱*/while(r->
next!
=p)r=r->
r->
next=q;
/*交换p和q所指向的结点*/
next=q->
q->
return(head);
else/*p不存在后继*/
return(NULL);
}/*swapin_list*/
6.有一个带头结点的单链表,所有元素值以非递减
有序排列,head为其头指针,编写算法deldy.list()将linklist*deldy_list(linklist*head)
/*在带头结点的非递减有序单链表,将该链表中多余的元素值相同的结点删除*/
linklist*q;
next!
=NULL)/*判断链表是否为空*/
while(p->
=NULL)
if(p->
data!
=p->
data)p=p->
{q=p->
/*q指向p的后继*/p->
/*删除q所指向的结点*/
free(q);
/*释放结点空间*/
}/*while*/
}/*if*/return(head);
}/*deldy_list*/该链表中多余元素值相同的结点删除。
7.在带头结点的单链表中,设计算法dellistmaxmin,删除所有数据域大于min,而小于max的元素。
linklist*dellist_maxmin(linklist*head,intmin,intmax)
{linklist*p,*q;
q=head;
p=head->
while(p!
=NULL)/*结点不空*/
if((p->
=min)||(p->
data>
=max))/*不满足删除条件*/
else/*满足删除条件*/
{q->
free(p);
q=q->
}/*dellist_maxmin*/
设计一个将双链表逆置的算法invert.dblinklist(),其中头指针为head,结点数据域为data,两个指针域分别为prior和next。
将双链表逆置的算法invert_dblinklist的算法如下所示:
voidinvert_dblinklist(linklist
*head)
/*将head指向的双链表逆置*/dblinklist*p,*q;
p=head;
do
q=p->
prior=q;
p=q;
}while(p!
=head)
}/*invert_dblinklist*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 习题