feat: Initial commit
This commit is contained in:
113
Laboratorio 8/Esercizio 3/AssetList.c
Normal file
113
Laboratorio 8/Esercizio 3/AssetList.c
Normal file
@@ -0,0 +1,113 @@
|
||||
// Laboratorio 8 - Esercizio 3 - AssetList.c
|
||||
// Matteo Schiff - s295565
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "Asset.h"
|
||||
#include "AssetList.h"
|
||||
#include "ExrateBST.h"
|
||||
|
||||
typedef struct node *link;
|
||||
struct node
|
||||
{
|
||||
Asset asset;
|
||||
link next;
|
||||
};
|
||||
|
||||
struct assetList
|
||||
{
|
||||
link head;
|
||||
int N;
|
||||
};
|
||||
|
||||
static link createNode(Asset asset, link next)
|
||||
{
|
||||
link new = malloc(sizeof(*new));
|
||||
new->asset = asset;
|
||||
new->next = next;
|
||||
return new;
|
||||
}
|
||||
|
||||
AssetList AssetListCreate()
|
||||
{
|
||||
AssetList al = malloc(sizeof(*al));
|
||||
|
||||
al->head = NULL;
|
||||
al->N = 0;
|
||||
|
||||
return al;
|
||||
}
|
||||
|
||||
void AssetListFree(AssetList al)
|
||||
{
|
||||
for (link x = al->head, p = x->next; p != NULL; x = p, p = x->next)
|
||||
{
|
||||
free(x);
|
||||
}
|
||||
free(al);
|
||||
}
|
||||
|
||||
int AssetListLength(AssetList al) {
|
||||
return al->N;
|
||||
}
|
||||
|
||||
void AssetListPrint(AssetList al) {
|
||||
link h = al->head;
|
||||
while (h != NULL) {
|
||||
AssetPrint(h->asset);
|
||||
h = h->next;
|
||||
}
|
||||
}
|
||||
|
||||
Asset * AssetListGet(AssetList al, int index) {
|
||||
link h;
|
||||
int i = 0;
|
||||
|
||||
h = al->head;
|
||||
while (h != NULL) {
|
||||
if (i == index)
|
||||
return &(h->asset);
|
||||
h = h->next;
|
||||
i++;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Asset * AssetListSearch(AssetList al, char * query) {
|
||||
link h;
|
||||
|
||||
h = al->head;
|
||||
while (h != NULL) {
|
||||
if (strcmp(AssetTitle(h->asset), query) == 0)
|
||||
return &(h->asset);
|
||||
h = h->next;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void AssetListInsert(AssetList al, Asset asset)
|
||||
{
|
||||
link x, p;
|
||||
if (al->head == NULL)
|
||||
{
|
||||
al->head = createNode(asset, al->head);
|
||||
al->N++;
|
||||
return;
|
||||
}
|
||||
|
||||
for (x = al->head, p = x->next; p != NULL; x = p, p = x->next)
|
||||
{
|
||||
if (AssetCompare(asset, x->asset) == 0)
|
||||
{
|
||||
ExrateBSTMerge(AssetGetExrates(x->asset), AssetGetExrates(asset));
|
||||
return;
|
||||
}
|
||||
else if (AssetCompare(asset, x->asset) < 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
x->next = createNode(asset, p);
|
||||
al->N++;
|
||||
}
|
||||
Reference in New Issue
Block a user