重複の可能性:
スキュー ヒープの C 実装
私は次の構造体を持っています:
typedef struct Task_t {
float length;
int value;
} task_t;
「値」を使用してこれらの構造体の束を保持するために、スキュー ヒープを使用しようとしています。したがって、最小の「値」を持つ構造体がルートになります。私のスキューヒープの実装は次のとおりです。
typedef struct node
{
int value;
struct node * root;
struct node * leftchild;
struct node * rightchild;
} Node;
typedef Node * skewHeap;
struct skewHeap
{
struct node * root;
};
void skewHeapInit (struct skewHeap *sk)
{
sk->root = 0;
}
void skewHeapAdd (struct skewHeap *sk)
{
struct node *n = (struct node *) malloc(sizeof(struct node));
struct node *s;
assert(n != 0);
n->value = 0;
n->leftchild = 0;
n->rightchild = 0;
s->root = skewHeapMerge(s->root,n);
}
void skewHeapRemoveFirst (struct skewHeap *sk)
{
struct node * n = sk->root;
sk->root = skewHeapMerge(n->leftchild, n->rightchild);
free(n);
}
struct node * skewHeapMerge(struct node *left, struct node *right)
{
struct node *temp;
if (left == NULL)
return right;
if (right == NULL)
return left;
if (left->value < right->value)
{
temp = left->leftchild;
left->leftchild = skewHeapMerge(left->rightchild, right);
left->rightchild = temp;
return left;
}
else
{
temp = right->rightchild;
right->rightchild = skewHeapMerge(right->leftchild, left);
right->leftchild = temp;
return right;
}
}
私の問題は、このスキュー ヒープから構造体を正しく挿入および削除する方法がわからないことです。前もって感謝します。