试比较顺序存储结构和链式存储结构的优缺点。在什么情况下用顺序表比链表好?

  • A+
(1)【◆题库问题◆】:[问答题] 试比较顺序存储结构和链式存储结构的优缺点。在什么情况下用顺序表比链表好?

【◆参考答案◆】:①顺序存储时,相邻数据元素的存放地址也相邻(逻辑与物理统一);要求内存中可用存储单元的地址必须是连续的。优点:存储密度大(=1?),存储空间利用率高。缺点:插入或删除元素时不方便。②链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针优点:插入或删除元素时很方便,使用灵活。缺点:存储密度小(<1),存储空间利用率低。顺序表适宜于做查找这样的静态操作;链表宜于做插入、删除这样的动态操作。若线性表的长度变化不大,且其主要操作是查找,则采用顺序表;若线性表的长度变化较大,且其主要操作是插入、删除操作,则采用链表。

(2)【◆题库问题◆】:[判断题] 具有12个结点的完全二叉树有5个度为2的结点。
A.正确
B.错误

【◆参考答案◆】:正确

(3)【◆题库问题◆】:[单选] 数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素的公式为()
A.r-f;
B.(n+f-r)%n;
C.n+r-f;
D.(n+r-F.%n

【◆参考答案◆】:D

(4)【◆题库问题◆】:[名词解释] 连通图

【◆参考答案◆】:
对于无向图,若V1到V2有路径,称V1V2是连通的,若图中任意两点都是连通的,则称该无向图是连通图。

(5)【◆题库问题◆】:[名词解释] 插入排序

【◆参考答案◆】:
每次将一个待排序的记录,按关键字大小插入到前面已经排好序的子序列中,直至全部记录插入完成。

(6)【◆题库问题◆】:[判断题] 取线性表的第i个元素的时间同i的大小有关
A.正确
B.错误

【◆参考答案◆】:正确

(7)【◆题库问题◆】:[填空题] 函数实现单链表的删除算法,请在空格处将算法补充完整。int ListDelete(LinkList L,int i,ElemType *s){LNode *p,*q;int j;p=L;j=0;while(((1) )&&(jnext;j++;}if(p->next==NULLj>i-1) return ERROR;q=p->next; (2);*s=q->data;free(q);return OK;}/*listDelete*/

【◆参考答案◆】:(1)p->next!=NULL(2)p->next=q->next

(8)【◆题库问题◆】:[问答题] 一个带权无向图的最小生成树是否一定唯一?在什么情况下构造出的最小生成树可能不唯一?

【◆参考答案◆】:
一个带权无向图的最小生成树不一定是唯一的。从Kruskal算法构造最小生成树的过程可以看出,当从图中选择当前权值最小的边时,如果存在多条这样的边,并且这些边与已经选取的边构成回路,此时这些边就不可能同时出现在一棵最小生成树中,对这些边的不同选择结果可能会产生不同的最小生成树。

(9)【◆题库问题◆】:[问答题,简答题] 设一个带头结点的单向链表的头指针为head,设计算法,将链表的记录,按照data域的值递增排序。

【◆参考答案◆】:voidassending(Lnode*heaD.{Lnode*p,*q,*r,*s;p=head->next;q=p->next;p->next=NULL;while(q){r=q;q=q->next;if(r->data<=p->datA.{r->next=p;head->next=r;p=r;}else{while(!p&&r->data>p->datA.{s=p;p=p->next;}r->next=p;s->next=r;}p=head->next;}}

(10)【◆题库问题◆】:[问答题] 对链表设置头结点的作用是什么?(至少说出两条好处)

【◆参考答案◆】:
(1)对带头结点的链表,在表的任何结点之前插入结点或删除表中任何结点,所要做的都是修改前一结点的指针域,因为任何元素结点都有前驱结点。若链表没有头结点,则首元素结点没有前驱结点,在其前插入结点或删除该结点时操作会复杂些。
(2)对带头结点的链表,表头指针是指向头结点的非空指针,因此空表与非空表的处理是一样的。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: