C语言实现哈希链表insert lookup函数 2012年中科蓝鲸笔试题

8 篇文章 0 订阅

参考http://www.cnblogs.com/zhanglanyun/archive/2011/06/07/2074328.html

略作修改

#include "stdio.h"
#include "stdlib.h"
#define HASHSIZE 5
struct Node
{
    int k;
    Node *next;
};
Node* Array[HASHSIZE];
//初始化哈希表
void InitHash()
{
    for(int i=0; i<HASHSIZE; i++)
    {
        Array[i] = (Node*) malloc(sizeof(Node));
        (*Array[i]).k=i;
        (*Array[i]).next=NULL;
    }
}
//打印
void PrintHash()
{
    for(int i=0; i<HASHSIZE; i++)
    {
        printf("%d:",(*Array[i]).k);
        Node *newNode = Array[i];
        newNode=newNode->next;
        while(newNode!=NULL)
        {
            printf("-->%d",newNode->k);
            newNode=newNode->next;
        }

        printf(" ");
    }
}
//插入新值
void Insert()
{
    int value;
    printf("Please input the value you want to insert:");
    scanf("%d",&value);
    //Hash value
    int hash=value%HASHSIZE;
    struct Node *newNode=(struct Node*)malloc(sizeof(Node));
    newNode->k=value;
    newNode->next=(*Array[hash]).next;
    (*Array[hash]).next=newNode;
}
//删除值
void Delete()
{
    int value;
    printf("Please input the value you want to delete:");
    scanf("%d",&value);
    //Hash value
    int hash=value%HASHSIZE;
    struct Node *newNode =( Node*)malloc(sizeof(Node));
    struct Node *pointer = (Node*)malloc(sizeof(Node));
    newNode=Array[hash];
    pointer=newNode;
    newNode=newNode->next;
    while(newNode!=NULL)
    {
        if(newNode->k==value)
        {
            pointer->next=newNode->next;
            free(newNode);
            return;
        }
        pointer=newNode;
        newNode=newNode->next;
    }
    printf("Can't find this value! ");
}
//搜索哈希Key对应的哈希值
void Search()
{
    int value;
    printf("Please input the value you want to search:");
    scanf("%d",&value);

    if(value>=0&&value<HASHSIZE)
    {
        struct Node *pointer=(struct Node*)malloc(sizeof(struct Node));
        pointer=Array[value];
        pointer=pointer->next;

        while(pointer!=NULL)
        {
            printf("%d-->",pointer->k);
            pointer=pointer->next;
        }
    }
    else
        printf("输入的值不在哈希索引范围!");
    printf(" ");
}
int main()
{
    InitHash();
    int value=1;
    while(value)
    {
        printf("1:Insert ");
        printf("2:Delete ");
        printf("3:Search ");
        printf("0:Exit ");
        scanf("%d",&value);
        switch(value)
        {
        case 0:
            return 0;
        case 1:
            Insert();
            break;
        case 2:
            Delete();
            break;
        case 3:
            Search();
            break;
        default:
            break;
        }
        PrintHash();
    }

    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值