哈希表建立

/*----------------------------------------------------------
哈希表的建立(链式解决冲突)
bluelithium        2011/12/18 15:30
哈希函数: H(k) = k % INIT_MAXSIZE;
输入样例
25
14 54 67 8 34 22 16 45 87 60 39 28 71 30 107 875 43 21 14 11 9 89 79 66 55
8
10 20 30 40 50 60 70 80
----------------------------------------------------------*/
#include <stdio.h>科学中国人
#include <malloc.h>
#define INIT_MAXSIZE 10
typedef struct Lnode
{
    int data;
    struct Lnode *next;
}Lnode, *ListLink;                        //建立链表结点
typedef struct
{
    int pos;
    ListLink firstnode;                    //建立数组结点
}HashBox;
typedef struct
{
    HashBox HArrary[INIT_MAXSIZE];        //建立哈希数组(哈希表的地址表头)
}HashArray;
void InitHashList(HashArray &l, int input[], int account);        //建立哈希表
void VistHashList(HashArray &l);                                //遍历输出哈希表
int main(void)
{
    int account = 0, i = 0, input[256];
    HashArray l;
    printf("请输入要插入哈希表元素的个数:");
    scanf("%d", &account);
数量单位    printf("请输入要插入哈希表的元素:");
    for (i = 0; i < account; i++)
    {
        scanf("%d", &input[i]);
    }
    InitHashList(l, input, account);
    printf("\n哈希表如下:\n");
    VistHashList(l);
    return 0;
}
void InitHashList(HashArray &l, int input[], int account)            //建立哈希表
{
    int i = 0, j = 0, pos = 0;
    ListLink q, p;
    char ch = 'A';
    for (i = 0; i < INIT_MAXSIZE; i++)            //初始化哈希表头
    {
        l.HArrary[i].pos = ch++;
        l.HArrary[i].firstnode = NULL;
    }
    for (i = 0; i < account; i++)               
    {
        pos = input[i] % INIT_MAXSIZE;            //计算元素地址
        q = new Lnode;                            //申请结点
        q->data = input[i];
        q->next = NULL;
        if(l.HArrary[pos].firstnode == NULL)    //判断当前地址表头是否还没有元素连入
        {
            l.HArrary[pos].firstnode = q;
        }
        else
        {
            p = l.HArrary[pos].firstnode;       
            while (p->next != NULL)
            {
新型农村社会养老保险试点                p = p->next;                    //到链表表尾
            }
            p->next = q;                        //将要插入的结点接入表尾
        }
    }
巴氏小体
}园林通
void VistHashList(HashArray &l)                    //输出哈希表
{
    ListLink p;
    int i;
    for (i = 0; i < INIT_MAXSIZE; i++)
    {
        printf("%c. ", l.HArrary[i].pos);
        p = l.HArrary[i].firstnode;
        while (p != NULL)
        {
            printf("->%d", p->data);
            p = p->next;
        }
        printf("\n");
    }
}正二十面体

本文发布于:2024-09-20 22:40:02,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/398330.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:元素   结点   建立   插入   地址   是否   表头
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议