无序链表的顺序查找

#include <stdio.h>
#include <stdlib.h>

//无序链表的顺序查找
//1 使用链表数据结构将字典对进行存储
//2 KEY值不能重复
//3 新插入数据时,如果出现KEY值重复,则当前字典中该KEY键的值替换
//  为最新插入的值
//4 对应的KEY键在字典中没有找到时,返回查找值为-1
typedef struct _NODE
{
    int   key;
    int   val;
    struct _NODE *next;
} NODE;

NODE *first = NULL;

NODE *newNode(int key, int val, NODE *nextNode)
{
    NODE *newNode = (NODE *)malloc(sizeof(NODE));
    if ( newNode == NULL )
    {
        return newNode;  
    }

    newNode->key = key;
    newNode->val = val;
    newNode->next = nextNode;

    return newNode;
}

void freeAllNode(void)
{
    NODE *freeNode = first;

    while ( freeNode != NULL )
    {
        NODE *nextNode = freeNode->next;
        free(freeNode); 
        freeNode = nextNode;
    }
}

void put(int key, int val)
{
    NODE *x = NULL;

    for ( x = first; x != NULL; x = x->next )
    {
        if ( x->key == key ) 
        {
            x->val = val;
            return;
        }
    }

    first = newNode(key, val, first);
}

int get(int key)
{
    NODE *x = NULL;

    for ( x = first; x != NULL; x = x->next)
    {
        if ( x->key == key ) 
        {
            return x->val; 
        }
    }

    return -1;
}

int main(int argc, char *argv[])
{
    int i = 0;
    int findKey = 0;
    int getVal = 0;
    int keys[] = {2,  4,  6,  1,  9,  4,  9,  8,  7,  2};
    int vals[] = {21, 41, 61, 11, 91, 42, 92, 81, 71, 22};

    if ( argc != 2 )
    {
        printf("Usage: %s <findKey>\r\n", argv[0]);
        return 0; 
    }

    for ( i = 0; i < sizeof(keys)/sizeof(keys[0]); i++)
    {
        put(keys[i], vals[i]); 
    }

    findKey = atoi(argv[1]);
    getVal = get(findKey);
    freeAllNode();

    printf("key %d, val %d\r\n", findKey, getVal);

    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值