东北大学计算机专业研究生入学考试2003年真题

/*---------------------------------------------------C语言部分--------------------------------------------------*/
/*三.已知2000年1月1日为星期六,编程求任意给定年元月1日的星期*/
/*四.今有一英汉词典文件EC.txt(文件大小超过1MB),每一词条格式如下:
     #book%in%z书!%z支票!%z帐薄!%ivt%z预定!%z登记姓名!
 编程完成
 (1)对词典建立索引文件,每间隔10KB,抽取一词条当不是词条时抽取不超过10KB的最大间隔的词条。
      索引文件格式为: 词条 词条在文件中的位置
      其中,词条为50BYTES,位置长整数占8BYTES。该功能函数CreateIndex完成。
 (2)根据索引大小,将建立的索引内容装入一连续缓冲区内。该功能用函数LoadIndex完成*/
 /*五.用回溯算法编写函数fill(int num,int n),用0到num-1的数填充n×n的矩阵,要求填充 
   的数不能重复,各行元素之和相同,各列元素之和也相同,输出所有可能的填充结果。 */
     
/*--------------------------------------------------数据结构部分-------------------------------------------*/
/*二、已知f为单链表的表头指针,链表中存储的都是整型数据,试设计算法将此链表的结点按照递增次序进行就地排序。*/
void InsertSort_L(Linklist &La)
 {
    //用直接插入排序使链表递增有序
    if(La->next)
	{
		//链表不空
    p = La->next->next;
        La->next->next = Null;
        while(p != NULL)
		{
            r = p->next; //暂存p的后继
      q = La;
            while(q->next && q->next->data < p->data) 
                q = q->next; //查找插入位置
      p->next = q->next; //插入
      q->next = p;
            p = r;
        }//while
    }//if
}

/*三、给出中 序线索二叉树的结点结构,试编写在不使用栈和递归的情况下先序编历中序线索二叉树的算法。*/
void InTraveseThr(BitTree thrt)
{
    //遍历中序线索二叉树
    p = thrt->lchild;  //p指二叉树根结点
 	while (p!=thrt)
	{
        while(p->Ltag == 0)
            p = p->lchild;
        printf(p->data);
	    while(p->rtag == 1 && p->rchild != thrt)
		{
            p = p->rchild;
            printf(p->data);
        }//while
        p = p->rchild;
    }//while
}//InTraversethr

/*四、设关键字是一个由26个小写字母组成的字符串,哈希表的长度为26。试编写算法,建立哈希表,并以第一个
字符的字典顺序输出哈希表中的所有关键字。设哈希表函数为hast(x)=x中的第一个字符在字典顺序中的序号,
采用线性深测再散列法来解决冲突。(假设函数f(x)能够计算出x中的第一个字符在字典顺序中的序号)。*/
(1)
void create_Hs(RedType &H , keyType key)
{
    i = Hash(key);//创建哈希表
	if(H(i) == NULL)//插入
		H(i) = key;
	else
	{
		//解决冲突,再插入
		j = (i+1)%m; //m 为表长
		while(j != i)
		{
			if(H[j] == NULL)
				H[j] = key;
			else 
				j = (j+1)%m;
		}
	}
}	
(2)
void print_Hs(RedType H)
 {
	//输出哈希表
	for(i = 0;i < 26;i++)
	{
		j = 1;
		while(H[j] != NULL)
		{
			if(f(H[j]) == i)	
				printf(H[j]);
			j = (j+1)%m;
		}//while
	}//for	
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值