【发布时间】:2011-07-31 14:41:09
【问题描述】:
我在C 中实现了B+ 树,并希望以树的形式打印它的键。我遵循以下算法进行打印,但遇到了一些分段错误。
从根开始,首先排队。然后出队直到队列为零。
由于每个节点都包含键及其值(指向下一级节点的指针),因此每个值在到达特定节点时也会排队。
以下是对叶子进行排队、出列和打印的代码。请让我知道这个特定代码有什么问题。
typedef struct QUEUE{
BPLUS bplusNode;
struct QUEUE * next;
}*ENQUEUE;
以下代码是对树的节点进行排队。(我将实现广度优先搜索)
void bplus_Enqueue(BPLUS bplusNew){
ENQUEUE bplusTemp;
if (queue == NULL){
queue = (ENQUEUE)malloc(sizeof(ENQUEUE));
queue->bplusNode= bplusNew;
queue->next = NULL;
}
else {
bplusTemp = (ENQUEUE)malloc(sizeof(ENQUEUE));
bplusTemp->bplusNode = bplusNew;
bplusTemp->next = NULL;
while(queue->next != NULL) {
queue = queue->next;
}
queue->next = bplusTemp;
free(bplusTemp);
}
}
以下代码用于出队
BPLUS bplus_Dequeue( void ){
BPLUS bplusTemp = queue->bplusNode;
queue = queue->next;
return bplusTemp;
}
以下代码用于打印树。
void bplus_PrintBplus(BPLUS root){
int i;
BPLUS tempBplus;
queue = NULL;
bplus_Enqueue(root);
if(queue == NULL){
printf("Sala kaam garena\n");
}
while(queue != NULL){
tempBplus = bplus_Dequeue();
for(i=0;i<tempBplus->numKeys;i++){
printf("%d -----> %d\n",i,tempBplus->keys[i]);
}
if(tempBplus->next != NULL){
for(i=0;i<=tempBplus->numKeys;i++)
bplus_Enqueue(tempBplus->pointers[i]);
}
}
}
此代码打印root 的键值和根的第一个连续节点,然后出现分段错误。你能帮我弄清楚这段代码有什么问题吗?
【问题讨论】:
-
如何在不同的函数中访问变量队列?静态还是作为参数传递?
-
您遇到了一些分段错误?您能否至少在调试器中花费 15 分钟以获取更具体的信息?