(学习笔记、随笔,希望有什么错误不足可以及时指出方便改正学习交流,谢谢!)
首先,我们需要了解到哈希查找的基本概念及单链表的基本结构;
哈希表本质是一种数据结构,又可以称为散列表。它的底层本质是数组,其中数组元素可以简单理解为地址(Node *hash[SIZE] ) ;为了方便理解,你可以直接理解为它是一个指针数组。哈希表一般由数组和链表构成 。
数组和单链表区别:
- 数组的内存是连续的,单链表不连续;
- 数组空间固定,链表空间不固定;
- 数组可以直接用下标访问元素,所以查找效率高,链表查找需要遍历,查找效率相对较低;
- 数组尾插效率最高,链表是头插效率最高;
- 数组的存储密度比链表的存储密度高;
程序功能介绍:(房屋管理查询系统)
根据用户需求查找选择合适户型展示,更加便捷实现楼盘的房产信息登记
实现----信息的建立(门牌号,楼层,户型及大小,价格)
实现----信息的添加(门牌号,楼层,户型及大小,价格)
实现----指定的查询(根据户型或者门牌号查询套房基本信息)
实现----房屋状态显示(显示房屋住入情况)
实现----信息的改动(房产变更导致信息变更)
实现----信息的删除(房产信息删除)
输入0即可退出该系统
数据结构的选择
散列表(哈希表)--实现查找功能----寻址查找容易,但插入和删除困难
单链表 ----实现数据储存--寻址困难,但插入和删除相对简单
实现过程
程序定义的主要函数 :
static int hashFunc; //定义哈希函数
Hash *createHash(); //创建哈希表
Node *createNode(); //创建链表里节点
data_t *createData();//创建一个数据结构体,存储键入的数据
int insertItemHash(Hash *pHash,data_t *pdata);//添加
int searchItemHash(Hash *pHash,data_t *pdata);//查找
int updateItemHash(Hash *pHash,data_t *pdata);//更新
int showHash(Hash *pHash,data_t *pdata);//展示
int deleteItemHash(Hash *pHash,data_t *pdata);//删除
void destroyHash(Hash **ppHash);//注销
enum HASH_OP
{
HASH_ERROR = -1,
HASH_OK = 0,
NOT_FOUND = 1
};//枚举
typedef struct data
{
int isbn;//主key,即门牌号
int floor;楼层
char type[20];//户型及大小,定义为char类型
float price;//价格
int state;//房屋状态
}data_t;//数据域结构体
typedef struct Node
{
data_t data;//节点的数据域
struct Node *pNext;//节点的指针域
}Node;//节点
typedef struct Hash
{
Node *hash[SIZE];//哈希表底层本质为数组,指针数组,数组元素为链表地址
int count;//计数
}Hash;//哈希表
程序主要分为三个部分:主函数,子函数和头文件
程序主函数
程序子函数
程序头文件