BTree.h
#include <stdio.h>
#define M 11
typedef struct
{
char PhoneNo[14];
char Name[10];
char Addr[16];
char Kind[24];
}UserInfo;//结构体大小64字节
typedef char TypeKey[12];
typedef struct Node{
int KeyNum;
long FilePos[M];
TypeKey Key[M];
struct Node *Parent;
struct Node *PtrSon[M + 1];
}TreeNode, *BTree;
char * InsValue; /* 与要插的键相对应的值 */
void InitBTree(BTree*);
UserInfo* SearchUser(TypeKey, BTree);
void InsertUser(TypeKey _key, long _filePos, BTree*);
void VisitBTree(TreeNode*);
void SetPrevKey();
BTree.c
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include "BTree.h"
TypeKey gPrevKey = "00000000000";
int Compare(TypeKey _srcKey, TypeKey _destKey)
{
TypeKey srcKey = {0};
TypeKey destKey = {0};
int keyIndex = 0;
strcpy(srcKey, _srcKey);
strcpy(destKey, _destKey);
if(NULL == srcKey && NULL == destKey)
{
return 0;
}
if(NULL == srcKey && NULL != destKey)
{
return -1;
}
if(NULL != srcKey && NULL == destKey)
{
return 1;
}
for(keyIndex = 0; keyIndex < 11; keyIndex++)
{
if(0 == srcKey[keyIndex] && 0 == destKey[keyIndex])
{
return 0;
}
if(0 == srcKey[keyIndex] && 0 != destKey[keyIndex])
{
return -1;
}
if(0 != srcKey[keyIndex] && 0 == destKey[keyIndex])
{
return 1;
}
if(srcKey[keyIndex] == destKey[keyIndex])
{
continue;
}
else
{
return srcKey[keyIndex] > destKey[keyIndex] ? 1 : -1;
}
}
return 0;
}
void SetPrevKey()
{
strcpy(gPrevKey, "00000000000");
}
void VisitBTree(TreeNode *_node)
{
TreeNode *treeNode = _node;
TreeNode *parentNode = NULL;
TypeKey prevKey = {0};
int keyIndex = 0;
parentNode = treeNode->Parent;
if(NULL != parentNode)
{
int index;
for(index = 0; index < (parentNode->KeyNum + 1); index++)
{
if(treeNode == parentNode->PtrSon[index])
{
break;
}
}
assert(index != (parentNode->KeyNum + 1));
}
for(keyIndex = 0; keyIndex < treeNode->KeyNum; keyIndex++)
{
if(NULL !