西南交通大学计算机学硕——数据结构真题6:2005年程序与算法设计题

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

考研真题

3、假设有如下的关于职工信息的结构体:

typedef struct Employee{
	long eID;
	char eName[10];
	struct Employee *pNext;
};


其中eID为职工编号,请编写一个函数:
Struct Employee* eIDSequence(struct Employee *pHead)
其中pHead为关于Employee的单链表头指针,该链表中已存放有若干职工的信息。该函数的功能是:对该链表的职工信息基于职工编号进行升序而得到的新链表,函数返回该新链表的头指针。
4、设哈希表长度为11,哈希函数为h(key)=key%11,给定的关键字序列为:(13,28,72,5,16,8,7,9,34,24,18,25)。
1)试画出用链地址法处理冲突时构成的哈希表;
2)写出用链地址法处理冲突时构造哈希表的算法;
3)写出从哈希表中删除关键字为k的一个记录的算法。
假定:一条记录中只包含关键字key
1)    链表结点结构为:

typedef struct HNode{
	int key;
	struct HNode *next;
};


2)    构造哈希表函数为:

void createHB(HNode *headLink[],int key[],int n)
其中:heahLink[]……哈希表,元素值为指向具有相同哈希值同义词的链表
Key[]……关键字表
N……关键字数目
3)    删除算法的函数为:

void DeleteNode(HNode *heahLink[],int key)

真题解析

3、对该链表的职工信息基于职工编号进行升序而得到的新链表,函数返回该新链表的头指针。

struct Employee* elDsequence(struct Employee* pHead)
{
	if (pHead==NULL||pHead->pNext==NULL)
	{
		return pHead;
	}
	if (pHead->pNext->pNext==NULL)
	{
		return pHead;
	}
	Employee *p,*pre,*r;
	pre=pHead->pNext;
	p=pre->pNext;
	while(p!=NULL)
	{
		r=pHead;
		//查找第一个大于等于p的结点
		while(r->pNext!=p&&r->pNext->eIDeID)
		{
			r=r->pNext;
		}
		if (r->pNext!=p)
		{
			//删除p结点
			pre->pNext=p->pNext;
			//将p插入r的下一个结点
			p->pNext=r->pNext;
			r->pNext=p;
			//p指向下一个元素
			p=pre->pNext;
		} 
		else
		{
			//p指向下一个元素
			pre=p;
			p=p->pNext;
			
		}
	}
	return pHead;
}

创建单链表

//创建链表
Employee* Create( int a[], int len)
{
	Employee* L;
	//创建头结点
	L = (Employee*)malloc(sizeof(Employee));
	L->pNext = NULL;

	Employee *prior, *pcur;
	prior = L;
	for (int i =0; i < len; i++)
	{
		pcur = (Employee*)malloc(sizeof(Employee));
		pcur->eID = a[i];		
		pcur->pNext = prior->pNext;
		prior->pNext = pcur;
		prior = pcur;
	}
	return L;
}

打印单链表

//打印链表
void Print(Employee* L)
{
	if (L==NULL)
	{
		return;
	}

	Employee* p;
	p = L->pNext;
	while (p != NULL)
	{
		printf("%d,\t", p->eID);
		p = p->pNext;
	}
	//退出循环时,p==L
	printf("\n");
}

测试Demo

int _tmain(int argc, _TCHAR* argv[])
{
	int a[] = { 3,2,1,9,7,6,5 };
	Employee* La=Create(a, 7);
	printf("*********La:**********\n");
	Print(La);
	Employee* Lb=elDsequence(La);
	printf("*********Lb:**********\n");
	Print(Lb);
	printf("*********La1:**********\n");
	Print(La);
	int a3=0;
	return 0;
}

测试结果:

西南交通大学计算机学硕——数据结构真题6:2005年程序与算法设计题_第1张图片

 

4、

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

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