Torna indietro   Hardware Upgrade Forum > Software > Programmazione

PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
Il modello "build to order" di PCSpecialist permette di selezionare una struttura base per un sistema, personalizzandolo in base alle specifiche esigenze con una notevole flessibilità di scelta tra i componenti. Il modello Lafité 14 AI AMD è un classico notebook clamshell compatto e potente, capace di assicurare una elevata autonomia di funzionamento anche lontano dalla presa di corrente
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Nothing con il suo nuovo Phone 4(a) conferma la sua identità visiva puntando su una costruzione che nobilita il policarbonato. La trasparenza resta l'elemento cardine, arricchita da una simmetria interna curata nei minimi dettagli. Il sistema Glyph si evolve, riducendosi nelle dimensioni ma aumentando l'utilità quotidiana grazie a nuove funzioni software integrate e notifiche visive. Ecco tutti i dettagli nella recensione completa
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Nelle ultime settimane abbiamo provato la Corsair Vanguard Air 99 Wireless, una tastiera tecnicamente da gaming, ma che in realtà offre un ampio ventaglio di possibilità anche al di fuori delle sessioni di gioco. Flessibilità e funzionalità sono le parole d'ordine di una periferica che si rivolge a chi cerca un prodotto capace di adattarsi a ogni esigenza e ogni piattaforma
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 31-03-2007, 12:17   #1
lucas87
Bannato
 
Iscritto dal: Oct 2006
Messaggi: 170
[C] Liste circolari

Salve ho un problema con le liste circolari.
Praticamente per la ricerca ho implementato la seguente funzione:

Codice HTML:
struct list *cerca(struct list *L, int x)
{
	struct list *L2 = L;

	/* se la lista è vuota, restituisce NULL  */
	if (L == NULL) return NULL;

	/* per ogni elemento della lista */
	do
	{
		if (L2->el == x) return L2;

		/* elemento successivo */
		L2 = L2->next;
	} while(L2 != L);

	return NULL;
}
Quindi la lista passata alla funzione è L, poi faccio un nuovo puntatore alla lista L che si chiama L2 e effettuo la ricerca finche L!=L2, dove però L2 dovrebbe partire a puntare al primo elemento e L dovrebbe rimanere fisso a puntare all'ultimo elemento.

COme faccio a farlo puntare all'ultimo elemento?

Grazie in anticipo. se non vi è chiaro qualcosa contattatemi, sono sempre connesso.
lucas87 è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2007, 13:07   #2
lucas87
Bannato
 
Iscritto dal: Oct 2006
Messaggi: 170
Help please!!!
lucas87 è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2007, 16:31   #3
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Mi sembra che vada benissimo così come è scritto..
L punta al primo elemento da controllare, ma è anche il primo elemento già controllato nella ricerca
Infatti L2 parte da L e quando ritorna (la lista è circolare) ad L significa che hai controllato tutti gli elementi ed il ciclo finisce correttamente.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2007, 17:07   #4
lucas87
Bannato
 
Iscritto dal: Oct 2006
Messaggi: 170
giusto, non ci avevo pensato che comuqnue sarebbe arrivato a L lo stesso, il problema è che nella fase di esecuzione crasha tutto.
lucas87 è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2007, 17:19   #5
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ad occhio non è quello il codice che ti fa crashare... Chiaramente se a quel codice gli passi una lista non circolare ti crasha...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2007, 17:21   #6
lucas87
Bannato
 
Iscritto dal: Oct 2006
Messaggi: 170
Io gli ho passato una lista concatenata, perchè pensavo che si dichiarassero =.

posto tutto il prog, vedi se la lista che gli passo è giusta o no:

Codice HTML:
#include<stdio.h>
#include<stdlib.h>

struct list {
       int el;
       struct list *next;
};


typedef struct list ELEMENT;
typedef ELEMENT *LINK;

LINK carica(LINK,int);
LINK cerca(LINK,int);

int main (void) {
    LINK L;
    int n_el,x;
    printf("Inserisci numero elementi da inserire");
    scanf("%d",&n_el);
    carica(L,n_el);
    printf("Inserisci l'elemento da cercare");
    scanf("%d",&x);
    if(x == cerca(L,x)) printf("Elemento %d presente nella lista",x);

    system ("PAUSE");
    return 0;
}


/*INSERISCE N ELEMENTI IN UNA LISTA CONCATENATA CIRCOLARE*/
LINK carica(LINK L, int n){
     if (n==0) return NULL;
     else {
          L=malloc(sizeof(ELEMENT));
          printf("inserisci l' elemento nella lista\n");
          scanf("%d",&L->el);
          L->next=carica(L,n-1);
          return L;
     }
}

/*CERCA UN ELEMENTO IN UNA LISTA CONCATENATA CIRCOLARE*/
LINK cerca(LINK L, int x)
{
	LINK L2 = L;

	/* se la lista è vuota, restituisce NULL  */
	if (L == NULL) return NULL;

	/* per ogni elemento della lista */
	do
	{
		if (L2->el == x) return L2;

		/* elemento successivo */
		L2 = L2->next;
	} while(L2 != L);

	return NULL;
}

grazie
lucas87 è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2007, 17:28   #7
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
La differenza fra una lista concatenata ed una lista circolare è che in quella circolare l'ultimo elemento della lista deve puntare alla testa invece che a NULL.
Anche se il concetto di testa piano piano sparisce
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2007, 17:33   #8
lucas87
Bannato
 
Iscritto dal: Oct 2006
Messaggi: 170
Questo lo so, ma io chiedo se nella dichiarazione di una lista tra una lista concatenata e una circolare cambia qual cosa e se si cosa?

grazie
lucas87 è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2007, 17:38   #9
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
No, non cambia assolutamente niente, l'unica differenza è nell'inizializzazione, in cui il campo next dell'ultimo elemento deve puntare alla testa e non a null (come fai nel codice).
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2007, 18:56   #10
lucas87
Bannato
 
Iscritto dal: Oct 2006
Messaggi: 170
Potresti indicarmi dove lo faccio puntare a NULL nel codice? NOn lo trovo

grazier
lucas87 è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2007, 19:07   #11
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Codice:
LINK carica(LINK L, int n){
     if (n==0) return NULL;
     else {
          L=malloc(sizeof(ELEMENT));
          printf("inserisci l' elemento nella lista\n");
          scanf("%d",&L->el);
          L->next=carica(L,n-1);
          return L;
     }
}
Quando arrivi all'ultimo elemento ritorni NULL, invece avresti dovuto ritornare l'elemento in testa.
Comunque io per un lista circolare inizializzerei la lista tramite un inserimento in testa.
In questo modo sei sicuro di mantenere sempre la lista consistente...

Inoltre mi sembra di vedere un altro problema, devi fare così nel main:

L = carica(L,n_el);

altrimenti il valore di L non viene modificato e rimane sempre pari a NULL
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2007, 19:29   #12
lucas87
Bannato
 
Iscritto dal: Oct 2006
Messaggi: 170
Niente non riesco a farlo andare.
Non è che mi fai creazione inserimento caricamento di una lista circolare tipo quello che ho fatto io ma funzionante?
Se puoi.

Gazrie
lucas87 è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2007, 21:43   #13
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Primo suggerimento: non mescolare mai l'input con gli algoritmi, un input ricorsivo non è bellissimo
Codice:
LINK carica_elemento_in_testa(LINK old, int valore)
{
   LINK head = (LINK)malloc(sizeof(ELEMENT));
   head->el = valore;
   
   if(old == NULL)
      old = head;
   
   head->next = old;

   return head;      
}
Poi ovviamente nel main dovrai inserire un for in cui chiederai in input l'intero e poi lo passerai alla funzione sopra.

Nel main definisci:

LINK head = NULL;

Quindi nel for dopo l'input con scanf richiama la funzione sopra così:

head = carica_elemento_in_testa(head, valore_letto);

Ovviamente tutto non compilato e passibile di sviste
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 01-04-2007, 10:57   #14
lucas87
Bannato
 
Iscritto dal: Oct 2006
Messaggi: 170
In teoria ora va il caricamneto, ma non va la stampa se come consizione metto che il puntatore che si muove L2 deve tornare alla posizione iniziale ed essere = al puntatore che rimane fermo L.
Se uso un for per stampare va,anche se con l'inserimento che mi stai facendo fare tu sembra di caricare uno stak e infatti la stampa la fa diciamo al contrario.
lucas87 è offline   Rispondi citando il messaggio o parte di esso
Old 01-04-2007, 11:09   #15
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Sì, è chiaro, facendo l'inserimento in testa si carica al contrario, ma non mi sembra che tu abbia vincoli da questo punto di vista, no ? Per la stampa comunque se vuoi mantenere l'ordine di inserimento puoi fare una visita posticipata...

Che ti succede con la ricerca che avevi fatto sopra ? Ti si pianta ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 01-04-2007, 11:58   #16
lucas87
Bannato
 
Iscritto dal: Oct 2006
Messaggi: 170
Si ora la ricerca va che è una mervaiglia. grazie.
ti linko anche questo post, magari sai darmi un consiglio

http://www.hwupgrade.it/forum/showth...6#post16578656

grazie
lucas87 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lav...
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Scivolone ASRock: annuncia il Ryzen 9 99...
DLSS 5: NVIDIA spiega il funzionamento, ...
PlayStation come NVIDIA DLSS: Sony punta...
OnePlus Nord 6 sta arrivando e avr&agrav...
CPU desktop: Intel dice addio ai socket ...
Google sta testando un'app di Gemini per...
NVIDIA GeForce RTX 5070 Laptop: in arriv...
Il Tribunale di Roma ha annullato la mul...
AppleCare One potrebbe arrivare presto i...
Amazon ci riproverà: l'azienda st...
Apple e Samsung dominano la classifica d...
Un game designer di 9 anni, due fogli a ...
Il weekend Amazon parte col botto: gross...
Amazfit Active 2 scende a 69,99€: i migl...
Smart TV No IVA su Amazon: QLED, Mini-LE...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:22.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v