Hash programming think twice

本文介绍了一个基于哈希表的数据管理系统实现,包括初始化、地址计算、数据读取及搜索等功能。通过具体代码示例展示了如何使用哈希表进行学生信息的存储与查找。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "Hash.h" 

int MathAscii(char * Mathparnter) {
	int backnumber = 0;
	char * move = Mathparnter;

	if (!Mathparnter) return 0;

	while (*move != '/0') {
		backnumber += *move;

		++move;
	}
	return backnumber;
}

#include "Hash.h"

int MathAddress(char (*hashname)[CHNUMBER],int *hashrand,
	Name ** haskeytype) {
		int i ,j;
		int MathAddresscount = 0;
		int pladdress = 0;

		for (i = 0 ;i <= (*haskeytype)[0].length;++i) {

			//math the ascii here
			pladdress = MathAscii(hashname[i]);

			pladdress %= LENGTH;
			j = 0;
			while (!(*haskeytype)[pladdress].flag) {
				pladdress = (pladdress + hashrand[j]) % LENGTH;
				++j;
			}	
			memcpy((*haskeytype)[pladdress].name,hashname[i],CHNUMBER);
			(*haskeytype)[pladdress].flag = 1;

		}
		return 0;
}

#include "Hash.h"


int main(int argc , char * argv[]) {
	
	char orderecieve;
	char store[LENGTH][CHNUMBER];
	int rdnumber[LENGTH];
	Name *hashstore;
	

	// clear the array named store

	memset(store,0,LENGTH*CHNUMBER);
	printf("Do you really wanna to start the program?/n");
	printf("if you really wanna to do that, you should type 'y' or 'Y'/n");
	printf("Please input a order to computer./n");
	orderecieve = getchar();
	fflush(stdin);

	/*
	**program init here
	*/
	Init(store,rdnumber,&hashstore);

	while (orderecieve == 'Y' || orderecieve == 'y') {
		SearchInfo(hashstore,rdnumber);
		orderecieve = getchar();
		fflush(stdin);
		if (orderecieve != 'Y' || orderecieve != 'y') {
			printf("Do you really wanna to exit the program./n");
			orderecieve = getchar();
		}
	}
	free(hashstore);
	return 0;
}

#include "Hash.h"

int Init(char (*hashname)[CHNUMBER],int *hashrand,Name ** hashkeytype) {

	*hashkeytype = (Name *)malloc(sizeof(Name) * LENGTH);
	if (!*hashkeytype) exit(-1);
	memset(*hashkeytype,0,LENGTH);
	(*hashkeytype)[0].length = ReadData(hashname);

	//init the random number

	RandNumber(hashrand);

	//math the address where is 

	MathAddress(hashname,hashrand,hashkeytype);
	return 0;
}

#include "Hash.h"

int SearchInfo(Name * hashkeytype,int * hashrandom) {
	int i = 0,j;
	int sum;
	char custominput[CHNUMBER];

	printf("Please input the student'name you wanna to find./n");
	scanf("%s",custominput);

	sum = MathAscii(custominput);
	do{
		sum %= LENGTH;
		if (hashkeytype[sum].flag && 
			!strcmp(custominput,hashkeytype[sum].name)) {
				printf("result: find the student whose/'card is %d",sum);
				break;
		}
		else if (hashkeytype[sum].flag) {
			j = 0;
			sum = (sum + hashrandom[j]) % LENGTH;
		}
		else {
			printf("^_^!,no this person.");
			break;
		}
	}while (i < LENGTH);


	return 0;
}

#include "Hash.h"


int ReadData(char (*temp)[CHNUMBER]) {
	int i  , j;
	FILE * pf;
	pf = fopen("test.txt","r");
	if (!pf) exit(-1);
	for (j = 0; j < LENGTH; ++j) {
		fscanf(pf,"%s",temp[j]);
		if (feof(pf))
			break;
	}
	for (i = 0;i <= j; ++i) {
		printf("%s/n",temp[i]);
	}
	return j;
}
#include "Hash.h"

int RandNumber (int * hashrandnumber) {
	int * move = hashrandnumber;
	srand((unsigned)time(NULL));
	for (; move <&hashrandnumber[LENGTH]; ++move) {

		*move = (int)(100.0 * (rand()/(RAND_MAX + 1.0)));
	}
#ifdef _DEBUG
	move = hashrandnumber;
	for (; move < &hashrandnumber[LENGTH]; ++move) {
		printf("%d/n",*move);

	}
#endif // _DEBUG
	return 0;
}
During programming , I find that these are several programs ,during I’am doing some programming .
for example , while I make the data struct in the this field,I also realize that I miss the length 
 
Now ,I think I should better find the most meta of the object. 
 
and the program also have some problem like this:
1.the function of functions is not one poupose .
for example ,in SearchInfo function,the judging person’s code is in the array or not .I think you could also use function.
 
finally , I last say that using the adding programming thought is a good idea!

 
时间限制:1000ms 内存限制:512MB 输入文件名:s.in 输出文件名:s.out 题目描述: 给定一个长度为 N 的只含小写字母的字符串 S,每次操作可以选择一个位置 1 ≤ x ≤ N 和一个小写字母 c,接着把 Sₓ 改为 c。 你需要操作若干次,使得操作结束后,每相邻 K 个字符都不同,求最少的操作次数。保证 1 ≤ K ≤ 13。 输入格式: 第一行一个整数 T,表示测试数据组数。 接下来 T 组测试数据,对于每组测试数据: 第一行两个整数 N, K,分别表示字符串长度和子串的长度。 第二行一个长度为 N 的字符串 S。 输出格式: 对于每组测试数据,输出一行一个整数表示最少的操作次数。 样例输入 1(input1): 5 6 3 abaaba 5 2 hooch 8 3 cherykid 9 3 abbabbaba 9 3 aabbaabba 样例输出 1(output1): 2 1 0 3 4 样例 #1 解释: 对于第一组数据,可以用 2 次操作把 S 改为 abcabc,每相邻三个字符组成的字符串分别是 abc、bca、cab、abc,都满足包含的字符互不相同。 对于第三组数据,请注意可以不进行操作。 数据范围: 对于所有数据,保证 1 ≤ T ≤ 10⁵,1 ≤ ∑N ≤ 10⁶,1 ≤ K ≤ 13,S 中只含有小写字符。 子任务说明: 子任务 1:∑N ≤ 10,K ≤ 10,分值 10 子任务 2:∑N ≤ 100,K ≤ 10,分值 10 子任务 3:∑N ≤ 10³,K ≤ 13,分值 10 子任务 4:∑N ≤ 10⁵,K ≤ 3,分值 20 子任务 5:∑N ≤ 10⁵,K ≤ 13,分值 20 子任务 6:∑N ≤ 10⁶,K ≤ 13,分值 30 用C++ 14 With O2的语言写一段代码,不要超时,不要注释,用万能头,变量名用一个字母表示,最终代码写好后随便写5组边缘样例测试一下刚刚写的代码(把代码放进编译器输出检查),然后根据刚刚的代码测试修改代码,将这两段代码里的变量名用一个字母替代。代码加上空格,使代码有可读性(实在拿不到全分,也可以拿部分分,尽量多拿!)注意加上文件读写!!!!!!!!!!
07-12
资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 “STC单片机电压测量”是一个以STC系列单片机为基础的电压检测应用案例,它涵盖了硬件电路设计、软件编程以及数据处理等核心知识点。STC单片机凭借其低功耗、高性价比和丰富的I/O接口,在电子工程领域得到了广泛应用。 STC是Specialized Technology Corporation的缩写,该公司的单片机基于8051内核,具备内部振荡器、高速运算能力、ISP(在系统编程)和IAP(在应用编程)功能,非常适合用于各种嵌入式控制系统。 在源代码方面,“浅雪”风格的代码通常简洁易懂,非常适合初学者学习。其中,“main.c”文件是程序的入口,包含了电压测量的核心逻辑;“STARTUP.A51”是启动代码,负责初始化单片机的硬件环境;“电压测量_uvopt.bak”和“电压测量_uvproj.bak”可能是Keil编译器的配置文件备份,用于设置编译选项和项目配置。 对于3S锂电池电压测量,3S锂电池由三节锂离子电池串联而成,标称电压为11.1V。测量时需要考虑电池的串联特性,通过分压电路将高电压转换为单片机可接受的范围,并实时监控,防止过充或过放,以确保电池的安全和寿命。 在电压测量电路设计中,“电压测量.lnp”文件可能包含电路布局信息,而“.hex”文件是编译后的机器码,用于烧录到单片机中。电路中通常会使用ADC(模拟数字转换器)将模拟电压信号转换为数字信号供单片机处理。 在软件编程方面,“StringData.h”文件可能包含程序中使用的字符串常量和数据结构定义。处理电压数据时,可能涉及浮点数运算,需要了解STC单片机对浮点数的支持情况,以及如何高效地存储和显示电压值。 用户界面方面,“电压测量.uvgui.kidd”可能是用户界面的配置文件,用于显示测量结果。在嵌入式系统中,用
资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 在 Android 开发中,Fragment 是界面的一个模块化组件,可用于在 Activity 中灵活地添加、删除或替换。将 ListView 集成到 Fragment 中,能够实现数据的动态加载与列表形式展示,对于构建复杂且交互丰富的界面非常有帮助。本文将详细介绍如何在 Fragment 中使用 ListView。 首先,需要在 Fragment 的布局文件中添加 ListView 的 XML 定义。一个基本的 ListView 元素代码如下: 接着,创建适配器来填充 ListView 的数据。通常会使用 BaseAdapter 的子类,如 ArrayAdapter 或自定义适配器。例如,创建一个简单的 MyListAdapter,继承自 ArrayAdapter,并在构造函数中传入数据集: 在 Fragment 的 onCreateView 或 onActivityCreated 方法中,实例化 ListView 和适配器,并将适配器设置到 ListView 上: 为了提升用户体验,可以为 ListView 设置点击事件监听器: 性能优化也是关键。设置 ListView 的 android:cacheColorHint 属性可提升滚动流畅度。在 getView 方法中复用 convertView,可减少视图创建,提升性能。对于复杂需求,如异步加载数据,可使用 LoaderManager 和 CursorLoader,这能更好地管理数据加载,避免内存泄漏,支持数据变更时自动刷新。 总结来说,Fragment 中的 ListView 使用涉及布局设计、适配器创建与定制、数据绑定及事件监听。掌握这些步骤,可构建功能强大的应用。实际开发中,还需优化 ListView 性能,确保应用流畅运
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值