PTA QQ帐户的申请与登陆 思路分析及代码解析v1.0
一、前导
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

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

713

被折叠的 条评论
为什么被折叠?



