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

更多西南交通大学真题,参考:西南交通大学计算机考研——数据结构真题系列

考研真题

3.编写一个函数将一个头结点指针为La的单链表A分解为两个单链表A和B,其头结点分别为La和Lb,其中A链表中含有A中序号为奇数的元素,而B链表中含有原链表A中序号为偶数的元素,且保持原来的相对顺序,该链表结点如下图所示。(6分)
4.设有一颗二叉树以二叉链表作为存储结构,结点结构为下图所示,试写出复制一颗二叉树的算法。设原来的二叉树跟为t,复制的二叉树跟为bt。

真题解析

3.编写一个函数将一个头结点指针为La的单链表A分解为两个单链表A和B,其头结点分别为La和Lb,其中A链表中含有A中序号为奇数的元素,而B链表中含有原链表A中序号为偶数的元素,且保持原来的相对顺序,该链表结点如下图所示。(6分)

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

}LNode,*LinkList;

链表A中结点按序号的奇偶性分解到表A或表B中

//链表A中结点按序号的奇偶性分解到表A或表B中
LNode* SeparateLNode(LNode* La)
{
	LNode* Lb;
	//记录表A中结点的序号
	int m_num=0;
	Lb=(LNode*)malloc(sizeof(LNode));
	Lb->next=NULL;
	//paTail,pbTail分别指向创建的La和Lb的尾结点
	LNode *paTail,*pbTail,*pCur;
	paTail=La;
	pbTail=Lb;
	pCur=La->next;
	La->next=NULL;
	while(pCur!=NULL)
	{
		m_num++;
		if (m_num%2==0)
		{
			pbTail->next=pCur;
			pbTail=pCur;
		} 
		else
		{
			paTail->next=pCur;
			pbTail=pCur;
		}
		pCur=pCur->next;
	}//while

	paTail->next=NULL;
	pbTail->next=NULL;

	return Lb;
}

4.设有一颗二叉树以二叉链表作为存储结构,结点结构为下图所示,试写出复制一颗二叉树的算法。设原来的二叉树跟为t,复制的二叉树跟为bt。

二叉树结构:

typedef struct BTNode{
	int data;
	struct BTNode *lchild,*rchild;
}BTNode;

复制二叉树:


BTNode* CopyTree(BTNode* t)
{
	BTNode* bt;
	if (t==NULL)
	{
		bt=NULL;
	} 
	else
	{
		bt=(BTNode*)malloc(sizeof(BTNode));
		bt->data=t->data;
		bt->lchild=CopyTree(t->lchild);
		bt->rchild=CopyTree(t->rchild);
	}
	return bt;
}

更多西南交通大学真题,参考:西南交通大学计算机考研——数据结构真题系列

你可能感兴趣的:(考研真题)