假設我有一個外部庫BST,處理自定義數據類型插入一個BST含自定義數據
這裏有new_node,插入和搜索函數C二叉搜索樹.C,假設我讀txt文件的車型:
#include <stdio.h>
#include <stdlib.h>
#include "bst.h"
#include <string.h>
#define MAX 50
typedef struct data_t{
int gg,mm,aaaa;
}data;
typedef struct accesories_t{
char name[MAX];
int price;
struct accesories_t *next;
}accesories;
typedef struct model_t{
//int index;
char name[MAX];
char file_a[MAX];
data date;
int price;
accesories *acs;
}model;
int main(int argc, char *argv[])
{
int menu=0;
char nf[MAX];
char name[MAX];
char fa[MAX];
int price,gg,mm,a;
strcpy(nf,argv[1]);
FILE *fp=fopen(nf,"+r");
model m;
struct bst_node* root = NULL;
while(fscanf(fp,"%s %d//%d//%d %d %s",name,gg,mm,a,price,fa)!=EOF){
strcpy(m.name,name);
strcpy(m.file_a,fa);
m.date.gg=gg;
m.date.mm=mm;
m.date.aaaa=a;
m.price=price;
m.index=index++;
insert(&root ,m);
}
system("PAUSE");
return 0;
}
所以我的問題出現在搜索功能,如何管理自定義數據的比較(假設插入模型由南排序e(strcmp)? 我我如何能名字傳給鑑於bst.c不知道我的模型結構是如何做出的bst.c很困惑。
我應該修改BST庫,也許在BST結構添加數據之前,某種指標和使用,作爲比較?
OK我已經成功通過添加字符串鍵的結構BST
我想要現在實現是返回void *的數據型鑄造成模型結構, 假設內部修復_I得到了與包含數據的節點樹,有一次我做搜索,我想返回 例如包含在其上的一個節點和工作數據,任何線索????
試圖像成纔沒有任何成功 假設節點從一個搜索功能
model *m;
m=(model*)node->data;
返回的節點我怎麼能做到這一點?
你可以在一個額外的參數傳遞給它的函數指針需要比較的所有功能。 – wildplasser 2012-02-26 15:10:05
或者你可以通過在BST創建時間 – Kevin 2012-02-26 15:13:29
完全函數指針。 (但是這將創建一個特殊的「頭」節點類型的需要)你走了。在你的服務.... – wildplasser 2012-02-26 15:14:52