tst_search.c
来自「Amarok是一款在LINUX或其他类UNIX操作系统中运行的音频播放器软件。 」· C语言 代码 · 共 69 行
C
69 行
#include "tst.h"#include <stdio.h>#include <stdlib.h>#include <assert.h>void *tst_search(unsigned char *key, struct tst *tst, int *prefix_len){ struct node *current_node; void *longest_match = NULL; int key_index; assert(key != NULL && "key can't be NULL"); assert(tst != NULL && "tst can't be NULL"); if(key[0] == 0) return NULL; if(tst->head[(int)key[0]] == NULL) return NULL; if(prefix_len) *prefix_len = 0; current_node = tst->head[(int)key[0]]; key_index = 1; while (current_node != NULL) { if(key[key_index] == current_node->value) { if(current_node->value == 0) { if(prefix_len) *prefix_len = key_index; return current_node->middle; } else { current_node = current_node->middle; if(current_node && current_node->value == 0) { if(prefix_len) *prefix_len = key_index+1; longest_match = current_node->middle; } key_index++; continue; } } else if( ((current_node->value == 0) && (key[key_index] < 64)) || ((current_node->value != 0) && (key[key_index] < current_node->value)) ) { if(current_node->value == 0) { if(prefix_len) *prefix_len = key_index; longest_match = current_node->middle; } current_node = current_node->left; continue; } else { if(current_node->value == 0) { if(prefix_len) *prefix_len = key_index; longest_match = current_node->middle; } current_node = current_node->right; continue; } } return longest_match;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?