微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 设计一个信息管理系统,你需要知道这些

设计一个信息管理系统,你需要知道这些

时间:08-29 来源:周立功单片机 点击:

           unsigned int    value_len;                           // 一条记录的长度

}; 

在存储或查找记录时,可以通过与关键字(比如,学号ID)比较找到哈希表中的索引值,然后在对应的表项中添加或查找记录。在存储记录时,需要提供关键字和记录;而在查找记录时,仅需提供关键字。由此可见,关键字和记录是两个不同的概念,关键字具有特殊的作用,因此关键字和记录应该分别对待。对于学生信息管理系统来说,其关键字为学号,长度是6字节,记录包含姓名、性别、身高、体重等信息。因此,在学生记录结构体的定义中,将关键字ID分离出来。学生记录的定义如下:

typedef struct _student{

            char          name[10];                        // 姓名

            char          sex;                             // 性别

            float         height, weight;                       // 身高、体重

}student_t;

同理,关键字的长度也是由用户决定的,在存储一条记录时,需要分配内存存储关键字,以便查询时读取该关键字与查询使用的关键字进行比较。因此在哈希表的结构体类型中,需要包含关键字长度信息,更新哈希表结构体类型的定义如下:

      struct _hash_db {

              slist_head_t    *p_head;                            // 指向数组首地址

              unsigned int        size;                                // 数组成员数

              unsigned int        value_len;                           // 一条记录的长度

              unsigned int        key_len;                            // 关键字的长度

}; 

特别地,在前面的分析中,哈希表最重要的一个概念就是"哈希函数",哈希函数的作用是通过关键字(如学号ID)得到其对应记录在哈希表中的索引值,哈希函数要尽可能确保记录均分地分布在哈希表的各个表项中。对于不同的数据,用户可能选择不同的哈希函数,因此哈希函数应该由用户指定。基于此,在哈希表结构体中新增一个函数指针,用于指向用户自定义的哈希函数。完整的哈希表结构体类型定义如下(hash_db.h):

typedef unsigned int (*hash_func_t) (const void *key);   // 定义哈希函数类型

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top