non ho eseguito il tuo codice, ma parto dall'errore e da quello che scrivi.
L'errore è segmentation fault, fin'ora quando ho visto questo errore ho provato l'accesso a memoria non inizializzata oppure sono andata fuori dal mio spazio di esecuzione.

Questa è la tua funzione di stampa

codice:
void stampa (Tlista_centraline l) {
	int x,y;
	Tlista_dati tmp;
	printf ("inserisci id\n");
	scanf ("%d",&x);
	printf ("inserisci ora\n");
	scanf ("%d",&y);
	while (l!=NULL) {
		tmp=l->dato.dati_ril;
		if (l->dato.id==x && tmp->dato.ora==y)
			printf ("ecco le ubicazioni che cercavi %d",l->dato.ubicazione);
		l=l->succ;
	}
}
guarda la funzione, il primo controllo è mettere delle printf prima di ogni istruzione (o debuggare) per sapere a che punto arrivi. Tipo questo


codice:
void stampa (Tlista_centraline l) {
	int x,y;
	Tlista_dati tmp;
	printf ("inserisci id\n");
	scanf ("%d",&x);
	printf ("inserisci ora\n");
	scanf ("%d",&y);
printf("l'input l'ho preso\n");
	while (l!=NULL) {
printf("dentro ciclo prima di assegnare temp\n");
		tmp=l->dato.dati_ril;
printf("dentro ciclo dopo aver assegnato temp\n");
		if (l->dato.id==x && tmp->dato.ora==y){

			printf ("ecco le ubicazioni che cercavi %d",l->dato.ubicazione);
}
printf("dopo if\n");
		l=l->succ;
printf("ultima istruzione\n");
	}
}
provi e vedi a che punto arrivi. La prima printf che non vedi ti fa capire che all'istruzione prima fai qualcosa che non devi.

Secondo me la struttura che passi ha qualche valore a NULL (che non controlli)