没有与参数列表匹配的重构函数等问题求大神指教

**

有三种不同的问题,下面直接上代码,错误在代码后面

**

这是一个分别用静态表,动态表和哈希表查找的题目,要求是对四位数字求除以3的余数然后查找出余数相同的值,后面那些“五五五”是人名。 共有三种错误,我是用的vs2017版本

#include<tchar.h>
#include <stdio.h> 
#include <malloc.h> 
#define MAXL 100	//最大长度 
#define NULLKEY -1			//定义空关键字值 
#define DELKEY	-2		//定义被删关键字值 

typedef int KeyType; //定义关键字类型为int 
typedef char InfoType;


typedef struct
{
	KeyType key;	//关键字项 
	InfoType data[7];	//其他数据项,类型为InfoType 
} RecType;	//查找元素的类型 
typedef struct
{
	KeyType flag;
	KeyType number[10];	//关键字项 
	KeyType length = 0;
} FlagType;	//查找元素的类型 

void DataInit(RecType R[], char name[7], int weight, int i)
{
	int j;
	R[i].key = weight;
	for (j = 0; j < 7; j++)
		R[i].data[j] = name[j];

}
void CreateData(RecType R[], int n)
{

	DataInit(R, "一一一", 3221, 1);
	DataInit(R, "二二二", 3223, 2);
	DataInit(R, "三三三", 3494, 3);
	DataInit(R, "四四四", 3495, 4);
	DataInit(R, "五五五", 3496, 5);
	DataInit(R, "六六六", 3606, 6);
	DataInit(R, "七七七", 3607, 7);
	DataInit(R, "八八八", 3781, 8);
	DataInit(R, "九九九", 3782, 9);
	DataInit(R, "十十十", 3919, 10);
	DataInit(R, "打的啥", 4050, 11);
	DataInit(R, "二七区", 4051, 12);
	DataInit(R, "问问问", 4054, 13);
	DataInit(R, "威风去", 4055, 14);
	DataInit(R, "可分为", 2896, 15);
}

void DispList(RecType R[], int n)	//输出顺序表 
{
	for (int i = 1; i <= n; i++)
		printf("%d ", R[i].key);
	printf("\n");
}
void DispListname(RecType R[], int n)	//输出顺序表 
{
	for (int i = 1; i <= n; i++)
	{
		printf(" %s: ", R[i].data);
		printf("%d \n", R[i].key);

	}
	printf("\n");
}
int SeqSearch(RecType R[], int n, KeyType k) //顺序查找余数相同算法 
{
	FlagType F[MAXL];
	int i = 1, j;
	int temp, count = 0;
	while (i <= n)
	{
		temp = R[i].key %k;
		for (j = i; j > 0; j--)
			if (F[j].flag == temp)//此时j为和temp相同的第一个值
			
				break;
		if (j == 0)//j=0表示数据中没有和当前余数相同的项
		{
			count++;
			F[count].flag = temp;//保存当前余数
			F[count].number[1] = i;//保存当前的序号到新建的组内
			F[count].length++;//count组成员加一
		}
		else
		{
			F[j].length++;//j!=0表示数据中有和temp相同的项,j组的成员加一
			F[j].number[F[j].length] = i;//保存当前的序号到j组中
		}
		i++;
	}
	for (j = 1; j <= count; j++)
	{
		printf("第%d组余数为%d 数据个数%d个 分别为:\n", j, F[j].flag, F[j].length);
		for (i = 1; i <= F[j].length; i++)
			printf("%s学号为%d \n", R[F[j].number[i]].data, R[F[j].number[i]].key);
	}
	return 1;

}


//二叉树
typedef struct node	//记录类型 
{
	KeyType key;	//关键字项 
	InfoType data[7];	//其他数据域 
	struct node* lchild, *rchild;		//左右孩子指针 
} BSTNode;

//数据初始化函数
bool InsertBST(BSTNode*& bt, KeyType k, InfoType name[7]) //在以bt为根节点的BST中插入一个关键字为k的节点 
{
	int i;
	//插入学号k
	if (bt == NULL)					//原树为空, 新插入的记录为根节点 
	{
		bt = (BSTNode*)malloc(sizeof(BSTNode));
		bt->key = k;
		bt->lchild = bt->rchild = NULL;

		for (i = 0; i < 7; i++)
			bt->data[i] = name[i];
		return true;
	}
	else if (k == bt->key)
		return false;
	else if (k < bt->key)
		return InsertBST(bt->lchild, k, name);	//插入到bt节点的左子树中 
	else
		return InsertBST(bt->rchild, k, name); //插入到bt节点的右子树中 

}

void DataInit(BSTNode*& bt)
{

	InsertBST(bt, 3221, "一一一");
	InsertBST(bt, 3223, "二二二");
	InsertBST(bt, 3494, "三三三");
	InsertBST(bt, 3495, "四四四");
	InsertBST(bt, 3496, "五五五");
	InsertBST(bt, 3606, "六六六");
	InsertBST(bt, 3607, "七七七");
	InsertBST(bt, 3781, "八八八");
	InsertBST(bt, 3782, "九九九");
	InsertBST(bt, 3919, "十十十");
	InsertBST(bt, 4050, "打的啥");
	InsertBST(bt, 4051, "二七区");
	InsertBST(bt, 34054, "问问问");
	InsertBST(bt, 4055, "威风去");

}



//查找的函数
int SearchBST(BSTNode* bt, int k)
{

	if (bt == NULL)
	{
		return 0;
	}
	else if (k == bt->key % 3)//检查根节点
	{
		printf("%s:%d\n", bt->data, bt->key);

	}
	SearchBST(bt->rchild, k);
	SearchBST(bt->lchild, k);
}
//显示代码段
void DispBST(BSTNode* bt)
//以括号表示法输出二叉排序树bt 
{
	if (bt != NULL)
	{
		printf("%d", bt->key);
		if (bt->lchild != NULL || bt->rchild != NULL)
		{
			printf(">");
			DispBST(bt->lchild);
			if (bt->rchild != NULL);
			DispBST(bt->rchild);
		}
	}
}

//判断代码段
KeyType predt = -32767;	//predt为全局变量,保存当前节点中序前驱的值,初值为-∞ 
bool JudgeBST(BSTNode* bt) //判断bt是否为BST 
{
	bool b1, b2;
	if (bt == `NULL)`
		return true;
	else
	{
		b1 = JudgeBST(bt->lchild);
		if (b1 == false || predt >= bt->key)
			return false;
		predt = bt->key;

		b2 = JudgeBST(bt->rchild);
		return b2;
	}
}
void DestroyBST(BSTNode* bt)  //销毁一颗BST 
{
	if (bt != NULL)
	{
		DestroyBST(bt->lchild);
		DestroyBST(bt->rchild);
		free(bt);
	}
}


//哈希表
typedef struct
{
	KeyType key;		//关键字域 
	InfoType data[7];			//其他数据域 
	int count;				//探测次数域 
} HashTable;			//哈希表元素类型 
//数据初始化函数
void InsertHT(HashTable ha[], int m, int p, KeyType k, InfoType name[7]) //将关键字为k的记录插入到哈希表中 
{
	int i, adr, j;
	adr = k % p;
	if (ha[adr].key == 0) //x[j]可以直接放在哈希表中 
	{
		ha[adr].key = k;
		ha[adr].count = 1;
		for (j = 0; j < 7; j++)
			ha[adr].data[j] = name[j];
	}
	else				//发生冲突时采用线性探测法解决冲突 
	{
		i = 1;			//i记录x[j]发生冲突的次数 
		while (ha[adr].key != 0)
		{
			adr = (adr + 1) % m;
			i++;
		}
		ha[adr].key = k;
		ha[adr].count = i;
		for (j = 0; j < 7; j++)
			ha[adr].data[j] = name[j];

	}
}
void CreateHT(HashTable ha[], int n) //哈希表初始化
{
	int i;
	for (i = 0; i < n; i++)		//哈希表置初值 
	{
		ha[i].key = 0;
		ha[i].count = 0;
	}
}
void DataInit(HashTable ha[], int n)
{
	CreateHT(ha, n);
	int m = 30;
	int p = 13;//哈希参数
	InsertHT(ha, m, p, 3221, "一一一");
	InsertHT(ha, m, p, 3223, "二二二");
	InsertHT(ha, m, p, 3494, "三三三");
	InsertHT(ha, m, p, 3495, "四四四");
	InsertHT(ha, m, p, 3496, "五五五");
	InsertHT(ha, m, p, 3606, "六六六");
	InsertHT(ha, m, p, 3607, "七七七");
	InsertHT(ha, m, p, 3781, "八八八");
	InsertHT(ha, m, p, 3782, "九九九");
	InsertHT(ha, m, p, 3919, "十十十");
	InsertHT(ha, m, p, 4050, "打的啥");
	InsertHT(ha, m, p, 4051, "二七区");
	InsertHT(ha, m, p, 4054, "问问问");
	InsertHT(ha, m, p, 4055, "威风去");
}
//查询函数
int SearchHT(HashTable ha[], int n, int k)	//在哈希表中查找除3余数相同的数据
{
	int i, count;
	count = 0;
	printf("余数为%d:", k);
	for (i = 0; i < n; i++)
	{
		if (ha[i].key % 3 == k)
		{
			printf("%s:%d\t", ha[i].data, ha[i].key);
			count++;
		}
	}
	if (count != 0)
		printf("\n共有%d个数据\n", count);
	else
		printf("\n没有余数为%d的数据\n", k);
	return 1;
}
//输出函数
void DispHT(HashTable ha[], int n)   //输出哈希表 
{
	int i;
	for (i = 0; i < n; i++)
	{
		if (i < 10)
			printf(" %d\t", i);
		else
			printf("%d\t", i);

	}
	printf("\n");
	for (i = 0; i < n; i++)
	{
		printf("%d\t", ha[i].key);
	}
	printf("\n");
	for (i = 0; i < n; i++)
	{
		printf("%s\t", ha[i].data);
	}
	printf("\n");
}



int _tmain(int argc, _TCHAR* argv[])
{
	RecType R[MAXL];
	int n = 14;
	int ch;
	KeyType k = 3;
	BSTNode * space = NULL;
	BSTNode* bt = NULL;
	while (1)
	{
		printf("选择查找方式\n1.顺序查找\n2.二叉树查找\n3.希尔查找\n");
		scanf_s("%d", &ch);
		switch (ch)
		{
		case 1:
			CreateData(R, n);//顺序表数据初始化
			SeqSearch(R, n, k);
			break;
		case 2:
			printf("二叉排序树初始化");
			printf("\n");
			DataInit(bt);
			printf("二叉排序树:\n"); DispBST(bt); printf("\n");
			printf("bt%s\n", (JudgeBST(bt) ? "是一棵BST" : "不是一棵BST"));
			printf("余数为0:\n"); SearchBST(bt, 0);
			printf("余数为1:\n"); SearchBST(bt, 1);
			printf("余数为2:\n"); SearchBST(bt, 2);
			printf("销毁BST\n"); DestroyBST(bt);
			break;
		case 3:
			//p是制作哈希值的系数
			HashTable ha[MAXL];
			DataInit(ha, n);
			DispHT(ha, n);
			printf("\n");
			SearchHT(ha, n, 0);
			SearchHT(ha, n, 1);
			SearchHT(ha, n, 2);
			SearchHT(ha, n, 3);
			break;
			return 1;
		}
	}
}

下面是错误

全部的错误都是和人名相关的三个部分,分别是DataInit,InsertBST,InsertHT对应三个错误
在这里插入图片描述
关于E0304的错误我尝试过在属性里面更改字符节,但是改后没有变化,后面两种错误完全没有头绪
在这里插入图片描述
求各位大神帮忙看看应该怎么改
/

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页
评论

打赏作者

kkmier

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值