Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1
void siftDown (BASE v[], int root, int bottom){
int done, maxChild;
done = 0;
while ((root * 2 < = bottom) && (!done)) {
if(root * 2 == bottom)
maxChild = root * 2;
else if (basecmp(v[root * 2], v[root * 2 + 1]) == 1)
maxChild = root * 2;
else
maxChild = root * 2 + 1;
if(basecmp(v[root], v[maxChild]) == -1){
swap (v, root, maxChild);
root = maxChild;
}
else
done = 1;
}
}
2
int partition (BASE v[], int lb, int ub){
int up, down;
BASE pivot;
pivot = v[lb];
down = lb;
up = ub;
while (down < up) {
while(basecmp(v[down], pivot) < = 0 && down < ub)
down++;
while(basecmp(v[up], pivot) == 1 && down < ub)
up--;
if(down < up)
swap (v, down, up);
}
swap(v, lb, up);
return up;
}
//LISTE
typedef struct s1 {
ITEM data;
struct s1 * next;
struct s1 * prev;
}ListNode;
3
ITEM delete (ListNode ** sptr, ITEM value){
if(currentPtr == NULL)
printf("the list is empty\n");
else{
printf("the list is:\n");
while(currentPtr != NULL){
printItem(currentPtr->data);
currentPtr = currentPtr->next;
}
}
}
/* PILE - LIFO */
struct stacknode{
int data;
struct stacknode * nextPtr;
};
4
int pop(StackNodePtr * topPtr){
StackNodePtr tempPtr;
int popValue;
tempPtr = *topPtr;
popValue = (*topPtr)->data;
*topPtr = (topPtr)->nexPtr;
free(tempPtr);
return popValue;
}
/* CODE - FIFO */
struct queueNode {
char data;
struct queueNode *nextPtr;
};
5
char dequeue (QueueNodePtr * headPtr, QueueNodePtr *tailPtr){
char value;
QueueNodePtr tempPtr;
value = (*headPtr)->data;
tempPtr = *headPtr;
*headPtr = (* headPtr) -> nextPtr;
/* se la coda non è vuota */
if(* headPtr == NULL){
*tailPtr = NULL;
}
free(tempPtr);
return value;
}
/* ALBERI */
typedef struct s1 {
TTREEITEM info; /* spesso puntatore a struct */
TTREEELEM * left;
TTREEELEM * right;
};
typedef struct s2 {
int n_elem;
TTREEELEM * tree;
};
6
void TreePrintPostOrder (TTREE * t);
TTREEELEM * LocateFather (TTREE * t, TTREEELEM * p);
TTREEELEM * TreeLocateMax (TTREEELEM * t);
TTREEELEM * TreeLocateMin (TTREEELEM * t);
TTREEELEM * TreeLocateSucc (TTREEITEM i, TTREE * t);
TTREEELEM * TreeLocatePrec (TTREEITEM i, TTREE * t);
7
int TreePutRecur (TTREE * t, TTREEITEM * i){
int a;
TTREEELEM * p, * z;
if(t->n_elem == 0){
z = Create(i);
t->n_elem++;
t->tree = z;
return 0;
}
z = Create(i);
a = putRecur(t->tree, z);
if(a == 1 || a == -1)
free(z);
else
t->n_elem+;
return a;
}
8
TTREEELEM * LocateNode(TTREE * t, TTREEITEM i, TTREEELEM **pf){
TTREEELEM * p, * q, * father;
p = father = q = t->tree;
while (q != NULL && i != p->info) {
father = p;
p = q;
if(basecmp(i, p->info) < 0)
q = p->left;
else
q = p->right;
}
if(p->info == i){
*pf = father;
return p;
}
else {
*pf = NULL;
return NULL;
}
}
9
int TreeGetNode (TTREE * t, TTREEITEM i){
TTREEELEM * p, * pfather, * rp, * rpfather;
p = LocateNode(t, i, &pfather);
if(p == NULL)
return 0;
if(IsLeaf(p))
rp = NULL;
else {
if(HasOneSubTree(p)){
if(p->left != NULL)
rp = p->left;
else
rp = p->right;
}
else {
rp = LocateInOrderSucc(p, &rpfather)
if(rpfather != p){
rpfather->left = rp->right;
rp->right = p->right;
}
rp->left = p->left;
}
if(p == t->tree)
t->tree = rp;
else if(p == pfather->left)
pfather->left = rp;
else
pfather->right = rp;
}
t->n_elem--;
free(p);
return1;
}
10
void TreePrintPreOrder (TTREE * t){
TTREEELEM * p;
p = t->tree;
if(p != NULL){
printItem(p);
TreePrintPreOrder(p->left);
TreePrintPreOrder(p->right);
}
}
11
TTREEELEM * TreeLocatePrec (TTREEITEM i, TTREE * t){
TTREEELEM * p, * fp;
p = LocateNode(t, i, &fp);
if(p == NULL)
return NULL;
if(p == TreeLocateMin(t->tree))
return NULL;
if(p->left != NULL)
return (TreeLocateMax(p->left));
while (p != NULL && (p == fp->left)) {
p = fp;
fp = LocateFather(t, fp);
}
return fp;
}
/* Hash Table */
#define FREE_SLOT -1
#define DELETED_SLOT -2
#define OCCUPATED_SLOT 0
typedef struct s0 {
TKEY key;
THASHITEM info;
}; //THASHELEM
typedef struct s1 {
int size;
THASHELEM * hash;
};//THASH
12
void HashFree (THASH * a){
if(!a->size)
return;
free(a->hash);
a->size = 0;
}
13
#define FREE_SLOT NULL
#define EMPTY_ITEM 0
typedef struct s0 {
TKEY key;
THASHITEM info;
struct s0 * next;
};
typedef struct s1 {
int size;
THASHELEM ** hash;
};
14
int HashPut (THASH * h, THASHITEM i, TKEY k){
int idx = hash (h, k);
THASHELEM * tmp = h->hash[idx];
THASHELEM * chain = tmp;
while (chain != NULL) {
if(basecmp(chain->key) == 0)
return FALSE;
chain = chain->next;
}
h->hash[idx] = ItemCreate(k, i);
h->hash[idx]->next = tmp;
return TRUE;
}
15