我已經在C
中實現了B+
樹,並且想要以樹形式打印它的密鑰。我遵循以下算法打印它,但得到了一些分段錯誤。在C中打印B +樹
從root開始,首先對它進行排隊。然後出隊,直到隊列變爲零。由於每個節點都包含密鑰及其值(指向下一級節點的指針),因此每個節點在到達特定節點時也會排隊等待。
以下是排隊,出隊和打印葉的代碼。請讓我知道這個partmaticcode有什麼問題。
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
密鑰值和根的第一連續節點,然後得到段故障。你能幫我弄清楚這段代碼有什麼問題嗎?
修復縮進。 – kay
如何在不同的功能中訪問變量隊列?靜態或作爲參數傳遞? – Shash316
你會得到一些**分段錯誤?你至少可以在調試器中花費15分鐘來獲得更具體的信息嗎? –