文档详情

习 题及答案_原创文档.pdf

发布:2024-08-26约8.95千字共13页下载文档
文本预览下载声明

习题二

1简述下列术语:线性表,顺序表,链表。

线性表:最常用且最简单的一种数据结构。一个线性表是n个数据元素的有限序列。

顺序表:是指用一组连续的存储单元一次存储线性表中的数据元素。物理结构和逻辑结

构都相邻。

链表:逻辑结构相邻的数据元素物理结构不一定相邻。采用指针的形式连接起来。

2何时选用顺序表,何时选用链表作为线性表的存储结构合适?各自的主要优缺点是什么?

不需要经常大量的修改表或需要随机存取的情况下可以选用顺序表;

相反需要经常大量的修改表,但不是频繁的随机存取的情况下可选用链式表。

3在顺序表中插入和删除一个结点平均需要移动多少个结点?具体的移动次数取决于哪两

个因素?

答:平均需要移动n/2个结点。表的长度,和要插入的位置。

4链表所表示的元素是否有序?如有序,则有序性体现于何处?链表所表示的元素是否一定

要在物理上是相邻的?有序表的有序性又如何理解?

答:有序。有序性体现在通过指针数据元素有序的相连。物理上不一定要相邻。

5设顺序表L是递增有序表,试写一算法,将x插入到L中并使L仍是递增有序表。

StatusListInsert(SqListL,inti,ElemTypee)

{

if((iL.length+1)||i1)

returnERROR;

if(L.length=L.listsize)

{

newbase=(ElemType*)realloc((L.listsize+LISTINCREMENT)*sizeof(ElemType));

if(!newbase)

exit(-1);

L.elem=newbase;

L.listsize+=LISTINCREMENT;

}

ElemType*q,*p;

q=L.elem[i-1];

for(p=L.elem[L.length-1];p=q;p--)

*(p+1)=*p;

*q=e;

L.length++;

returnOK;

}

9设A和B是两个按元素值递增有序的单链表,写一算法将A和B归并为按按元素值递减

有序的单链表C,试分析算法的时间复杂度。

voidListInsert(SqListA,SqListB,SqListC)

{

ElemType*p,*q,*s;

P=A;

q=B;

s=C;

while(p.next!=NULL||q.next!=NULL)

{

if(p.next.data=q.next.data)

{

if(s.next!=NULL)

p.next=s.next;

s.next=p.next;

p++;

}

else

{

if(s.next!=NULL)

q.next=s.next;

s.next=q.next;

q++;

}

}

while(p.next!=NULL)

{

p.next=s.next;

s.next=p.next;

}

while(q.next!=NULL)

{

q.next=s.next;

s.next=q.next;

}

习题三

1设有一个栈,元素进栈的次序为a,b,c。问经过栈操作后可以得到哪些输出序列?

Abc,acb,bac,bca,cba.

2循环队列的优点是什么?如何判断它的空和满?

优点:可以克服顺序队列的“假上溢”现象,能够使存储队列的向量空间得到充分

利用。

判断循环队列的空或满不能以头尾指针是否相等来确定,一般是通过以下几种方法:

一是另设一布尔变量来区

显示全部
相似文档