第一阶段测试题汇总 -答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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] {