Untitled

mail@pastecode.io avatar
unknown
c_cpp
16 days ago
2.5 kB
2
Indexable
Never
/*Definire un tipo di dato opportuno per la rappresentazione e manipolazione di una lista di 
 caratteri.
 Realizzare un sottoprogramma che riceve come parametri due liste per la gestione 
 di caratteri L1 ed L2. Il sottoprogramma deve restituire una NUOVA lista L3, 
 senza modificare le altre due, i cui elementi siano i caratteri alfabetici più piccoli 
 rispetto al codice ASCII tra ciascuna coppia di elementi nella stessa posizione di L1 ed L2. 
 Se le due liste hanno lunghezze diverse si copiano in L3 gli elementi rimanenti della lista 
 con lunghezza maggiore.
Esempi:
Se il sottoprogramma riceve in ingresso
L1 = ’S’ -> ’T’ -> ’O’ -> ’P’ -> ’i’ -> ’t’ ->|
L2 = ’E’ -> ’N’ -> ’C’ -> ’o’ -> ’d’ -> ’e’ ->|
allora
L3 = ’E’ -> ’N’ -> ’C’ -> ’P’ -> ’d’ -> ’e’ ->|
Se il sottoprogramma riceve in ingresso 
L1=’S’->’T’->’O’->’P’->’i’->’t’->’N’->’o’->’w’->’!’ ->| 
L2=’E’ -> ’N’ -> ’C’ -> ’o’ -> ’d’ -> ’e’ ->|
allora
L3=’E’->’N’->’C’->’P’->’d’->’e’->’N’->’o’->’w’->’!’ ->|
Non sono disponibili sottoprogrammi di manipolazione delle liste. 
Utilizzate e sviluppate quelli che ritenete utili.*/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct nodo_{
	char car;
	struct nodo_ *next;
}nodonodo_t; 

nodo_t* creaNodo(char car){
	nodo_t* nuovo= (nodo_t*)malloc(sizeof(nodo_t));
	if(nuovo==NULL){
		return NULL; 
	}else{
		nuovo->car=car;
		nuovo->next=NULL; 
	}
	return nuovo; 
}

nodo_t* inserisciCoda(nodo_t*head, char car){
	nodo_t*nuovo=creaNodo(car);
	if(head==NULL){
		return NULL;
	}
	nodo_t*corrente=head;
	while(corrente->next!=NULL){
		corrente=corrente->next;
	}
	corrente->next=nuovo;
	return head;
}


nodo_t* restituisci_lista(nodo_t* l1, nodo_t* l2){
	if(l1==NULL || l2==NULL){
		return NULL;
	}
	nodo_t* curr1=l1;
	nodo_t* curr2=l2;
	nodo_t* l3=NULL;  

while(curr1!=NULL){
	while(curr2!=NULL){
		if(curr1->car<=curr2->car){
			l3=inserisciCoda(l3,curr1->car);
		}else{
			l3=inserisciCoda(l3,curr2->car); 
		}
		curr2=curr2->next; 
	}
	curr1=curr1->next; 
}
while(curr1!=NULL){
	l3=inserisciCoda(l3, curr1->car);
	curr1=curr2->next;
}
while(curr2!=NULL){
	l3=inserisciCoda(l3, curr2->car);
	curr2=curr2->next;
}
return l3; 
}

void stampalista(nodo_t* head){
	nodo_t* corrente=head; 
	while(corrente!=NULL){
		printf("%c", corrente->car);
		corrente=corrente->next; 
	}

}
Leave a Comment