西南交通大学计算机专业考研真题答案详解6:2012年算法设计题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haimianjie2012/article/details/83713462

一、考研真题

1、下面是求两个集合A和B的并集(AUB)的算法,集合A和集合B分别用单链表La和Lb的带头结点的单链表表示(链表中的数据按升序排序),其并集用单链表Lc表示(带头结点,其数据也按升序排列),请填空完善算法。(每空2分)。

2、对给定的带头结点的单链表L,结点值得类型为整型,编写一个删除L中值为x的算法(L中可能有多个值为x的结点,且值得分布具有随机性)。(6分)

3、假设将循环队列定义为:

typedef struct
{
	QElemType *base;
	int rear;//指向循环队列中队尾元素的位置
	int length;//表示队列中所含数据元素的个数
}SqQueue;
SqQueue Q;

试给出次循环队列的队满条件,并写出相应的入队列和出队列算法(在出队列的算法中要返回队头元素)。(8分)

4、编写一个递归算法,计算以二叉树表示的二叉树T的高度h。(6分)

二、真题解析

2、对给定的带头结点的单链表L,结点值得类型为整型,编写一个删除L中值为x的算法(L中可能有多个值为x的结点,且值得分布具有随机性)。(6分)

typedef struct LNode
{
	int data;
	struct LNode* next;

}LNode,*LinkList;

void DeleteLNode(LNode* &L,int x)
{
	if (L==NULL)
	{
		return;
	}

	LNode *p,*q;
	p=L;
	while(p->next!=NULL)
	{
		if (p->next->data==x)
		{
			q=p->next;
			p->next=q->next;
			free(q);			

		}else{
			p=p->next;
		}
	}
	
}

3、试给出次循环队列的队满条件,并写出相应的入队列和出队列算法(在出队列的算法中要返回队头元素)。(8分)

//入队
int EnCQueue(SqQueue &Q, QElemType x)
{
	if(Q.length == MAXQSIZE){
		return -1;//循环队列满
	}
	Q.base[Q.rear] = x;
	Q.rear=(Q.rear+1)%MAXQSIZE;
	++Q.length;//当前元素个数+1
	return 0;
}
//出队
int DeCQueue(SqQueue &Q, QElemType &x)
{    
	if(Q.length==0){
		return -1;//循环队列空
	}
	int font=(Q.rear+MAXQSIZE-Q.length)%MAXQSIZE;
	x = Q.base[font];
	--Q.length;//当前元素个数-1
	return 0;
}    

4、编写一个递归算法,计算以二叉树表示的二叉树T的高度h。(6分)

int Heigh(BTNode* btree)
{
	if (btree == NULL)
	{
		return 0;
	}
	int lheight, rheight;
	lheight = Heigh(btree->lchild);
	rheight = Heigh(btree->rchild);
	if (lheight>rheight)
	{
		return lheight + 1;
	}
	else {
		return rheight + 1;
	}
}

猜你喜欢

转载自blog.csdn.net/haimianjie2012/article/details/83713462