#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;
}
无序链表的顺序查找
最新推荐文章于 2022-12-05 19:26:19 发布