PTA QQ帐户的申请与登陆 思路分析及代码解析

本文介绍了一种使用开放地址法实现哈希表的方法,用于处理PTA平台上的QQ账号登录与注册问题。通过具体的代码实现展示了如何利用哈希表进行数据存储与检索,并给出了完整的AC编码和调试过程中遇到的问题。

一、前导

1. 需要掌握的知识

通过开放地址法实现Hash/哈希表

2. 题目信息

2.1 题目来源:PTA / 拼题A
2.2 题目地址: QQ帐户的申请与登陆

二、解题思路分析

1. 题意理解

对输入的数据进行判定(L代表登录, N代表新建),打印对应的判定结果。举个栗子:L 1234567890 myQQ@qq.com ,由于数据库中还没有账号1234567890 ,因此打印 ERROR: Not Exist

1. 1 输入数据

5 //条数
L 1234567890 myQQ@qq.com //指令 QQ号 对应密码
N 1234567890 myQQ@qq.com
N 1234567890 myQQ@qq.com
L 1234567890 myQQ@qq
L 1234567890 myQQ@qq.com

1.2 输出数据

ERROR: Not Exist //对应的结果
New: OK
ERROR: Exist
ERROR: Wrong PW
Login: OK
......

2. 思路分析

2.1 由于是字符型数据(账号、密码),优先使用Hash表存储和查询
2.2 首先创建Hash表(开放地址),遇到L就执行查询、遇到N就执行插入,根据查询、插入的结果打印对应的判定语句

三、具体实现

1. 弯路和bug

1.1 Hash表编码的熟练度仍然偏低,只能多练习啦
1.2 C语言中没有string类,用malloc无法识别,编译时会报:读取字符串的字符出错
1.3 别忘记释放Hash表占用的内存

2. 代码框架

2.1 采用的数据结构

结构体

#define Size 17 //QQ密码最大16位+'\0'=17位

typedef char ElementType[Size]; //用于存储账号和密码
typedef int Position;
typedef enum {
   
   Occupied,Vacant} PostionStatus;

struct HashTableCell
{
   
   
	ElementType UserNumber;
	ElementType Password;
	PostionStatus Status;
};
typedef struct HashTableCell Cell;

struct HashTableStructure
{
   
   
	int HashTableSize;
	Cell* CellArray;
};
typedef HashTableStructure* HashTable;

2.2 程序主体框架

               程序伪码描述
int main()
{
   
   
	1.创建Hash表(开发地址)
	2.读入数据、执行对应的操作
}

2.3 各分支函数

2.3.1 CreateHashTable( ) 创建Hash表并赋初值(开放地址法)

HashTable CreateHashTable(int TableSize)
{
   
   
	HashTable H;
	H = (HashTable)malloc(sizeof(struct HashTableStructure));

	H->HashTableSize = NextPrime(TableSize);

	H->CellArray = (Cell*)malloc(sizeof(Cell) * H->HashTableSize);

	for (int i = 0; i < H->HashTableSize; i++)
	{
   
   
		H->CellArray[i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值