Skip to content

Commit

Permalink
es. 20211129
Browse files Browse the repository at this point in the history
  • Loading branch information
beltra committed Nov 29, 2021
1 parent f9d2db3 commit c8694fd
Show file tree
Hide file tree
Showing 13 changed files with 585 additions and 2 deletions.
Binary file added 20211129/listaQuadrato
Binary file not shown.
35 changes: 35 additions & 0 deletions 20211129/listaQuadrato.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/*
* Scrivere un programma che acquisisca 5 numeri interi da tastiera e li inserisce in una lista.
* Il programma chiede un ulteriore numero N, se questo è presente nella lista, lo elimina e aggiunge alla fine il suo quadrato
*/

#include <stdio.h>
#include <stdlib.h>
#include "liste_int.h"

#define NUM 5

int main (int argc, char *argv[]) {
listi_t *head = NULL;
int i, n;

for (i = 0; i < NUM; i++) {
scanf("%d", &n);
head = append(head, n);
}

scanf("%d", &n);

if (search(head, n)) {
head = delete(head, n);
head = append(head, n*n);
} else {
printf("%d not in list\n", n);
}

view(head);

freeList(head);

return 0;
}
113 changes: 113 additions & 0 deletions 20211129/liste_int.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
#include <stdio.h>
#include <stdlib.h>
#include "liste_int.h"

listi_t *push(listi_t *head, int val) {
listi_t *newNode;

/* Creo un nuovo nodo */
newNode = malloc(sizeof(listi_t));

if (newNode) {
/* Lo metto prima della head */
newNode->num = val;
newNode->next = head;

head = newNode;
} else {
printf("push: failed allocating memory\n");
}

return head;
}

listi_t *append(listi_t *head, int val) {
listi_t *newNode;
listi_t *p;

/* Creo un nuovo nodo */
newNode = malloc(sizeof(listi_t));

if (newNode) {
/* Gli assegno il valore */
newNode->num = val;
newNode->next = NULL;

if (head == NULL) { // Se la lista è vuota
head = newNode;
} else {
// Arrivo in fondo alla lista (*p ultimo elemento)
for (p = head; p->next != NULL; p = p->next);
p->next = newNode;
}
} else {
printf("append: failed allocating memory\n");
}

return head;
}

listi_t *freeList(listi_t *head) {
listi_t *tmp;

/* Scorro tutta la lista e elimino ogni elemento */
while (head != NULL) {
tmp = head;
head = head->next;
free(tmp);
}

return head;
}

listi_t *search(listi_t *head, int val) {
listi_t *p;

/* Scorro tutta la lista */
for (p = head; p != NULL; p = p->next) {
/* Se trovo l'elemento cercato ritorno il suo indirizzo */
if (p->num == val) {
return p;
}
}

return NULL;
}

listi_t *delete(listi_t *head, int val) {
listi_t *p, *del;

/* Se l'elemento cercato è il primo */
if (head->num == val) {
del = head;
head = head->next;
free(del);

return head;
} else {
for (p = head; p->next != NULL; p = p->next) {
/* Mi fermo all'elemento precedente a quello con il valore richiesto */
if (p->next->num == val) {
/* Cambio il puntatore dell'elemento precedente a quello successivo a quello cercato */
del = p->next;
p->next = p->next->next;
/* Elimino l'elemento cercato */
free(del);

return head;
}
}
}

return head;
}

void view(listi_t *head) {
listi_t *p;

/* Stampo ogni elemento della lista */
for (p = head; p != NULL; p = p->next) {
printf("%d -> ", p->num);
}
printf("|\n");
}
20 changes: 20 additions & 0 deletions 20211129/liste_int.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#ifndef LISTE_INT_H
#define LISTE_INT_H

typedef struct listint_s {
int num;
struct listint_s *next;
} listi_t;

listi_t *append(listi_t *head, int newval);
listi_t *push(listi_t *head, int newval);

void view(listi_t *head);

listi_t *freeList(listi_t *head);

listi_t *search(listi_t *head, int val);

listi_t *delete(listi_t *head, int val);

#endif
69 changes: 69 additions & 0 deletions Liste/Librerie/liste_char.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
void view(listc_t *head) {
listc_t *p;

for (p = head; p != NULL; p = p->next) {
printf("%d -> ", p->num);
}
printf("|\n");
}

listc_t *push(listc_t *head, char val) {
listc_t *newNode;

newNode = malloc(sizeof(listc_t));

if (newNode) {
newNode->num = val;
newNode->next = head;

head = newNode;
} else {
printf("push: failed allocating memory\n");
}

return head;
}

listc_t *append(listc_t *head, char val) {
listc_t *newNode;
listc_t *p;

newNode = malloc(sizeof(listc_t));

if (newNode) {
newNode->num = val;
newNode->next = NULL;

if (head == NULL) { // Se la lista è vuota
head = newNode;
} else {
// Arrivo in fondo alla lista (*p ultimo elemento)
for (p = head; p->next != NULL; p = p->next);
p->next = newNode;
}
} else {
printf("append: failed allocating memory\n");
}

return head;
}

listc_t *freeList(listc_t *head) {
listc_t *tmp;

while (head != NULL) {
tmp = head;
head = head->next;
free(tmp);
}

return head;
}

listc_t *search(listc_t *head, char val) {
return head;
}

listc_t *delete(listc_t *head, char val) {
return head;
}
23 changes: 23 additions & 0 deletions Liste/Librerie/liste_char.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#ifndef LISTE_CHAR_H
#define LISTE_CHAR_H

typedef struct listc_s {
char num;
struct listc_s *next;
} listc_t;

/* Anche la append può modificare l'inizio della lista (quando la lista è vuota), quindi restituisce la head */
listc_t *append(listc_t *head, char newval);
listc_t *push(listc_t *head, char newval);

/* Stampa tutti i valori della lista */
void view(listc_t *head);

/* Libera tutta la lista */
listc_t *freeList(listc_t *head);

listc_t *search(listc_t *head, char val);

listc_t *delete(listc_t *head, char val);


73 changes: 73 additions & 0 deletions Liste/Librerie/liste_float.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#include <stdio.h>
#include <stdlib.h>
#include "liste_float.h"

void view(listf_t *head) {
listf_t *p;

for (p = head; p != NULL; p = p->next) {
printf("%d -> ", p->num);
}
printf("|\n");
}

listf_t *push(listf_t *head, float val) {
listf_t *newNode;

newNode = malloc(sizeof(listf_t));

if (newNode) {
newNode->num = val;
newNode->next = head;

head = newNode;
} else {
printf("push: failed allocating memory\n");
}

return head;
}

listf_t *append(listf_t *head, float val) {
listf_t *newNode;
listf_t *p;

newNode = malloc(sizeof(listf_t));

if (newNode) {
newNode->num = val;
newNode->next = NULL;

if (head == NULL) { // Se la lista è vuota
head = newNode;
} else {
// Arrivo in fondo alla lista (*p ultimo elemento)
for (p = head; p->next != NULL; p = p->next);
p->next = newNode;
}
} else {
printf("append: failed allocating memory\n");
}

return head;
}

listf_t *freeList(listf_t *head) {
listf_t *tmp;

while (head != NULL) {
tmp = head;
head = head->next;
free(tmp);
}

return head;
}

listf_t *search(listf_t *head, float val) {
return head;
}

listf_t *delete(listf_t *head, float val) {
return head;
}
20 changes: 20 additions & 0 deletions Liste/Librerie/liste_float.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#ifndef LISTE_FLOAT_H
#define LISTE_FLOAT_H

typedef struct listf_s {
float num;
struct listf_s *next;
} listf_t;

listf_t *append(listf_t *head, float newval);
listf_t *push(listf_t *head, float newval);

void view(listf_t *head);

listf_t *freeList(listf_t *head);

listf_t *search(listf_t *head, float val);

listf_t *delete(listf_t *head, float val);

#endif
Loading

0 comments on commit c8694fd

Please sign in to comment.