数据结构平时作业
1
.评价一个好的算法,应该从哪几方面来考虑的?
答:
1
、算法的正确性,
2
、算法的易读性,
3
、是算法的健壮性,
4
、是算法的时空效率(?/p>
行)
?/p>
2.
简述线性表的顺序和链式两种存储结构各自的主要特点?/p>
答:
1
、顺序存储结构:存储单元地址连续,它以“物理位置相邻”来表示线性表中数据元
素间的逻辑关系?/p>
可随机存取表中任一元素?/p>
但它也使得插入和删除操作需移动大量?/p>
数据元素?/p>
由于顺序表需要一组地址连续的存储单元,
对于长度可变的线性表就需要预
分配足够的空间,
有可能使一部分存储空间长期闲置不能充分利用?/p>
也可能由于估计不
足,
当表长超过预分配的空间而造成溢出?/p>
在这种情况下?/p>
又难于扩充连续的存储空间?/p>
2
、链式存储结构:存储单元地址为任意一组,它的存储单元可以是连续的,也可以?/p>
不连续的?/p>
甚至是零散分布在内存中的任意位置上的?/p>
因此?/p>
链表中结点的逻辑次序?/p>
物理次序不一定相同?/p>
在表示数据元素之间的逻辑关系时,
除了存储其本身的信息之外?/p>
还需存储一个指示其直接后继的信息(即直接后继的存储位置?/p>
,这两部分信息组成数
据元素的存储映像,称为结点(
node
?/p>
3.
说明在线性表的链式存储结构中,试述头结点
,
首元结点
,
头指针这三个概念的区?/p>
.
答:头结点、首元结点、头指针区别为:性质不同、目的不同、存在情况不同?/p>
一、性质不同
1
)头结点:头结点是在链表的首元结点之前附设的一个结点?/p>
2
)首元结点:首元结点是指链表中存储线性表中第一个数据元?/p>
a1
的结点?/p>
3
)头指针:头指针是指向链表中第一个结点(或为头结点或为首元结点)的指针?/p>
二、目的不?/p>
1
)头结点:头结点为了方便操作链表而附设的?/p>
2
)首元结点:首元结点作为链表的开始结点?/p>
3
)头指针:头指针为了指向链表的基地址?/p>
三、存在情况不?/p>
1
)头结点:头结点对于单链表来说,头结点可有可无,但为了操作方便,一般情况下单链
表都具有头结点?/p>
2
)首元结点:首元结点如果单链表有头结点,则首元结点为头结点的下一个结点,如果?
链表没有头结点,则首元结点就是单链表的第一个结点?/p>
3
)头指针:头指针如果单链表有头结点,则头指针指向头结点,如果单链表没有头结点?
则头指针指向第一个首元结点?/p>
4.
设计一个算法,将元?/p>
x
插入到一个有序(从小到大排序)顺序表的适当位置上,并保
持有序性?/p>
答:通过比较在顺序表
L
中找到插?/p>
x
的位?/p>
i
,将该位置及后面的元素均后移一个位置,
?/p>
x
插入到位?/p>
i
中,最后将
L
的长度增?/p>
1
。对应算法如下:
Void Insert
?/p>
SqList *&L,ElemType x
?/p>
{
int i=0,j;
while (i<L
-
>length && L
-
>data[i]<x) i++;