第11章第15题定义代码(h) (Powered by biggates)

/// Chapter11.h: 第11章数据结构

 

typedef int keyType;                //以int类型作为散列值类型

typedef char dataType;                //以char类型作为数据类型

 

const int HASH_TABLE_LENGTH = 20;

//令表长为20

 

const int MODDER = 17;                //用作求余数的素数

 

const dataType EMPTY_CHAR = '/0';    //空的数据值的标志

const keyType EMPTY_KEY = -1;        //空的散列值的标志

 

 

//散列表的定义

typedef struct hashChain

//"拉链"的定义,实际上就是一个单链表的定义

{

    //keyType key;                    //该节点的散列值(真是没用啊,明明散列值都一样,为什么还要写一遍呢?)

    dataType data;                    //该节点的数据值

    struct hashChain* pNext;        //指向下一个散列"拉链"的指针

}hashChain;

 

typedef struct hashNode

//散列表的主表,实际上就只有一个hashChain类型的指针域

{

    keyType key;                    //该节点的散列值

    hashChain* pChain;                //该散列值对应的链表头地址

}hashNode;

 

/// 以下是函数声明

 

//

//以下是访问自定义数据类型的函数

//

void printKeyType(const keyType key);

void printDataType(const dataType data);

 

void printHashTable( hashNode* head, const int size);

//显示以head为首,长度为size的hashNode表的内容的函数

 

//

//以下是处理自定义数据结构的函数

//

 

void initializeHashChain(hashChain* chain);

//初始化一个hashChain节点的函数

 

void initializeHashNodes(hashNode* head, const int size);

//初始化一个hashNode节点的函数

 

hashNode* createHashTable(hashNode* head, const int size, const int totalNumber);

//建立初始长度为size的散列表,并返回其首地址的函数

//不成功则返回NULL

 

keyType getHash(const dataType data);

//从data算出hash值的函数

 

hashChain* newHashChain();

//分配新的hashChain节点的函数

 

hashNode* chainSearch(hashNode* head, const int size, const dataType data);

//在以head为首,长度为size的hashNode表中查找data,并返回其Node地址的函数

//不成功则返回NULL

 

hashChain* insertIntoChain(hashNode* head, const int size, const dataType data);

//在以head为首,长度为size的hashNode表中插入值为data的节点的函数

//成功则返回其地址,否则返回NULL

 

void freeHashTable(hashNode* head, const int size);

//释放以head为首,长度为size的hashNode表所占用的空间的函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值