HASH相关例子

来源:互联网 发布:股票历史数据查询软件 编辑:程序博客网 时间:2024/05/29 15:22

#include <stdio.h>

#include <stdlib.h>

struct mac_ip{

    char Mac[18];

    char Ip[16];

    struct mac_ip *next;

};

typedef struct mac_ip Mac_IP;

int hahash(const char mac[],int n)

{

    int len=strlen(mac);

    int i,sum=0;

    for(i=0;i<len;i++)

        sum+=mac[i];

    return(sum%n);

}

void insert_new(Mac_IP *tank[],char mac[],char ip[])

{

    Mac_IP *temp;

    int i,n;

    temp=(Mac_IP*)malloc(sizeof(Mac_IP));

    if(temp == NULL){

        printf("Malloc error!\n");

        exit(1);

    }

    strcpy(temp->Mac,mac);

    strcpy(temp->Ip,ip);

    temp->next=NULL;

    n=hahash(mac,131);

    if(tank[n] == NULL){

        tank[n]=temp;

    }

    else{

        temp->next=tank[n];

        tank[n]=temp;

    }

}

char *hash_search(Mac_IP *tank[],char mac[])

{

    int n;

    Mac_IP *p;

    n=hahash(mac,131);

    if(tank[n] == NULL){

        printf("No record of this MAC!\n");

        return NULL;

    }

    else{

        p=tank[n];

        while(p != NULL){

            if(strcmp(p->Mac,mac) == 0)

               return(p->Ip);

            else

                p=p->next;

        }

        printf("No record of this MAC!\n");

        return NULL;

    }

}

int main(int argc,char **argv)

{

    Mac_IP *tank[131];

    int i;

    char *ip=NULL;

    for(i=0;i<131;i++)

        tank[i]=NULL;

    insert_new(tank,"10-2F-34-25-6D-DE","192.168.10.25");

    insert_new(tank,"10-2F-34-6D-DE-25","192.168.1.126");

    insert_new(tank,"4D-25-E4-2C-62-DE","10.0.0.234");

    ip=hash_search(tank,"10-2F-34-25-6D-DE");

    if(ip != NULL){

        printf("ip:%s\n",ip);

    }

    return 0;

}

原创粉丝点击