第一阶段测试题汇总 -答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、算法有哪些特征?怎样评价一个算法?

答:算法有五个特性,分别为确定性、有穷性、可行性、0个或多个输入、1个或多个输出。评价算法可以从时间复杂度和空间复杂度来衡量其效率。

2、头指针和头结点的类型不一样吗?

答:略

3、什么是静态分配?什么是动态分配?

答:①静态分配是指变量或数据的空间是在程序加载时分配,其空间大小在程序运行不会改变,空间的分配和释放不能通过代码控制;②动态分配是指数据空间是在程序运行过程中分配的,空间的释放也是在程序运行过程中通过代码完成。

4、在单链表中,什么是头结点?什么是头指针?什么是首元结点?

答:头结点:为保护头指针而在链表中增设的结点,其数据域一般不用,指针域用以存储首元结点的地址;头指针:链表访问的起点,在带头结点的单链表中存储头结点的地址,在不带头结点的单链表中存储首元结点的地址;首元结点:第一个元素结点。

头指针头结点首元节点

(头指针可以指向头结点或者首元节点)

5、在单链表、双向链表和单循环链表中,若仅知道指针P指向某结点,不知道头指针,能否将结点*P从相应的链表中删去?若可以,其时间复杂度为多少?答:不管是什么链表,要将结点P从链表中删除均需找到P的前驱结点。如果是单链表,在不知头指针的条件下无法找到前驱,故无法删除;如果是双向链表,则可通过P的前驱指针找到其前驱结点,故可直接删除,无需查找,其时间复杂度为O(1);如果是循环链表,则可通过指针移动找到其前驱,其时间复杂度为O(N)。

6、顺序栈和链栈哪一种更好?为什么?

答:略

7、递归算法效率是否非常低?

答:略

8、在顺序队列操作中,什么是“假溢出”现象?怎样解决这种现象?

答:在顺序队列中,可能会因为频繁的入队和出队操作造成队列有剩余空间却

无法完成入队操作的现象,即为“假溢出”现象。可采用循环队列来解决此问题,通过求余运算将队列从逻辑上构造成一个环状结构。

9、循环队列的优点是什么?如何判定它的空和满?

答、循环队列可以解决顺序队列中出现的假溢出现象,但仅凭头尾指针是否相等无法区分队空和队满。此时有两种方案可以解决此问题。一是使用标识符,如length来记录队列元素个数,当length==0时队列为空,当length==MAXQSIZE 时队列已满;另一种方案是少用一个元素空间,约定以队列头指针在队尾指针的下一个位置作队列呈满状态的标志,头尾指针相等时队列为空。

10、下述算法的功能是什么?

LinkList Demo(LinkList L)

{

ListNode *P,*Q;

if (L&&L->next)

{

Q=L;L=L->next;P=L;

While(P->next) P=P->next;

P->next=Q;

Q->next=NULL;

}

return L;

}

答:将链表的头结点移至链表末尾,原链表首元结点作为新的头结点。

11、下述算法的功能是什么?

…………

SqQueue Q1,Q2;

int x,I,m=0;

…………

while(!QueueEmpty(Q1))

{

x=DeQueue(Q1);

EnQueue(Q2,x);

m++;

}

for(I=0;I

{

x=DeQueue(Q2);

EnQueue(Q1,x);

EnQueue(Q2,x);

}

…………

答:将队列Q1的元素复制到队列Q2中。

12、下述算法的功能是什么?

void demo2(SqQueue *Q)

{

int x;SqStack S;

InitStack(&S);

while(!QueueEmpty(Q))

{

x=DeQueue(Q);

push(S,x);

}

while(!StackEmpty(S))

{

x=pop(S);

Enqueue(Q,x);

}

}

答:将队列Q的元素按逆序存储,其第一个元素的起始位置将下移一段距离,此距离为队列的长度。

13、指出下列程序段的功能是什么?

1)void demo1(SqStack *S)

{

int I,arr[64],n=0;

while(!StackEmpty(S))

arr[n++]=pop(S);

for(I=0;I

push(s,arr[I]);

}

答:将栈中元素按逆序存放。

14、设计算法,实现顺序表的选择排序(元素类型为整型)void SelectSort(SqList L)

{

for(i=0;i

{

min=i;

for(j=i+1;j

if(L.elem[j]

if(min!=i)

{

L.elem[min]<->L.elem[i];

}

}

}

15、设计算法,实现顺序表的冒泡排序(元素类型为整型)void BubbleSort(SqList L)

{

change=1;

for(i=1;i

{

change=0;

for(j=0;j

if(L.elem[j]

{

相关文档
最新文档