2016-01-24 60 views
-3

我最近遇到這個代碼,用於形成隊列,使用數組來存儲二叉樹的節點。雙指針在C中的結構有什麼用?

typedef struct node{ 
    int data; 
    node *left, *right; 
}Node; 

Node** createQueue(int *front, int *rear) 
{ 
    Node **queue = (Node **)malloc(sizeof(Node*)*500); 
    *front = *rear = 0; 
    return queue; 
} 

int main(){ 
    int rear, front; 
    Node **queue = createQueue(&front, &rear); 
    return 0; 
} 

在隊列形成過程中雙指針的用途是什麼?

這是鏈接到整個程序:

http://www.geeksforgeeks.org/level-order-tree-traversal/

(方法2)

+5

我不知道,請問誰寫的代碼編程。 –

+0

它看起來像程序員試圖動態地使500個指針的*數組* *。 –

+0

不要在C中投放'malloc'和朋友的結果! – Olaf

回答

1

如果有T類型的對象,例如

T x; 

當指向對象將具有類型T *

T *px = &x; 

在您的示例中,動態分配了一個500指針,該指針指向Node類型的對象。這是陣列的每個元素都有類型Node *

Node **queue = (Node **)malloc(sizeof(Node*)*500); 

函數malloc返回數組的第一個元素的地址。

由於動態分配數組的每個元素都有類型Node *,因此指向數組的指針的指針將具有類型Node **

你可以想象它通過以下方式

typedef Node * T; 

T *queue = (T *)malloc(sizeof(T) * 500); 

所以,如果你Node *代替T你會得到

T  *queue = (T  *)malloc(sizeof(T) * 500); 
Node * *queue = (Node * *)malloc(sizeof(Node *) * 500); 
0

「雙指針」是「的指針,指針」,從提供摘錄它是很難說爲什麼程序員決定他/她需要這樣的結構。

可能是需要遍歷整個樹的一些任務,但不關心它的樹性,所以這可以幫助避免遞歸(我的意思是可能需要修改這些,爲了簡單的遍歷一個單一的終場就足夠了)