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

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

一、考研真题

3、设计一算法,实现在数据元素有序的顺序存储结构的线性表中插入一个值为x的操作。如果无存储空间则插入失败,函数的返回值为插入成功与否的标志。(8分)

4、设有两个整数集合A和B,分别用递增有序链表表示,设计一算法实现两个集合的联合运算,运算结果也有递增有序链表表示。运算后,A、B两个链表保持不变。(8分)

二、真题解析

3、设计一算法,实现在数据元素有序的顺序存储结构的线性表中插入一个值为x的操作。如果无存储空间则插入失败,函数的返回值为插入成功与否的标志。(8分)

#define QElemType int
#define MaxQSize 100 //队列最大元素个数
typedef struct
{
	QElemType *base;
	int rear;//指向循环队列中队尾元素的位置
	int length;//表示队列中所含数据元素的个数
	
}SqQueue;
SqQueue Q;
int InsertQueue(SqQueue &L,int x)
{
	//队列以满,插入失败
	if (L.length>=MaxQSize) 
		return -1;	
	if(L.length<2)return -1;

	int flag;//队列增序1,减序-1
	if (L.base[L.length-1]-L.base[0]>=0)
	{
		flag=1;
	} 
	else
	{
		flag=-1;
	}
	int m_index;
	for (int i=L.length-1;i>=0;i--)
	{
		if (flag*(L.base[i]-x)<0)
		{
			m_index=i;
			break;
		}else{
			L.base[i+1]=L.base[i];
		}
	}
	L.base[m_index+1]=x;
	L.length++;
	return 0;
}

4、设有两个整数集合A和B,分别用递增有序链表表示,设计一算法实现两个集合的联合运算,运算结果也有递增有序链表表示。运算后,A、B两个链表保持不变。(8分)

LNode* Union(LNode* La,LNode* Lb)
{
	if (La==NULL&&Lb==NULL)	
		return NULL;
	if(La==NULL&&Lb!=NULL)
		return Lb;
	if(La!=NULL&&Lb==NULL)
		return La;

	LNode *pCHead = NULL; //A与B交集头
	LNode *pCEnd = NULL;  //A与B交集尾
	//创建头结点
	pCHead = new LNode();	
	pCHead->next = NULL;
	pCEnd = pCHead;

	LNode *pA = La->next; //指向有序列表A第一个结点
	LNode *pB = Lb->next; //指向有序列表B第一个结点
	while (pA != NULL && pB != NULL)
	{
		int data;
		if (pA->data == pB->data)
		{
			data = pA->data;
			//相等,同时后移
			pA = pA->next;
			pB = pB->next;
		}
		else if (pA->data > pB->data)
		{
			data= pB->data;
			//最小的相比,B小 B后移
			pB = pB->next;
		}
		else
		{
			data = pA->data;
			//最小的相比,A小 A后移
			pA = pA->next;
		}

		LNode *pNode = new LNode();
		pNode->data = data;
		//插入新建结点
		pNode->next = pCEnd->next;
		pCEnd->next = pNode;
		pCEnd=pNode;
	}

	if (pB!=NULL)
	{
		pA=pB;
	}

	while (pA!=NULL)
	{
		LNode *pNode = new LNode();
		pNode->data = pA->data;
		//插入新建结点
		pNode->next = pCEnd->next;
		pCEnd->next = pNode;
		pCEnd=pNode;

		pA=pA->next;
	}
	return pCHead;
}

猜你喜欢

转载自blog.csdn.net/haimianjie2012/article/details/83829308
今日推荐