Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Abbiamo provato per diversi giorni una new entry del mercato italiano, la Gowow Ori, una moto elettrica da off-road, omologata anche per la strada, che sfrutta una pendrive USB per cambiare radicalmente le sue prestazioni
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
OnePlus 15 nasce per alzare l'asticella delle prestazioni e del gaming mobile. Ma non solo, visto che integra un display LTPO 1,5K a 165 Hz, OxygenOS 16 con funzioni AI integrate e un comparto foto con tre moduli da 50 MP al posteriore. La batteria da 7.300 mAh con SUPERVOOC 120 W e AIRVOOC 50 W è la ciliegina sulla torta per uno smartphone che promette di offrire un'esperienza d'uso senza alcun compromesso
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media
Vediamo come si comporta il Ryzen 5 7500X3D, nuovo processore di casa AMD che fonde 6 core Zen 4 con la tecnologia 3D V-Cache, particolarmente utile in scenari come il gaming. Annunciato a un prezzo di listino di 279€, il nuovo arrivato sarà in grado di diventare un riferimento per i sistemi budget? Ecco cosa ne pensiamo.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-12-2007, 15:54   #1
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
[C] Inizializzare una lista

Allora, devo fare un programma che data una lista con elementi presi da input chiami una funzione che togla un determinato elemento k dalla lista, anch'esso preso da input. cioè elimini dalla lista la prima occorrenza di k

se ad esempio l'input è 3 5 2 7 3

la lista sarà cosi 3->7->2->5->3

cioè il primo elemento inserito sarà l'ultimo della lista e il secondo il penultimo e cosi via

ho fatto la funzione ma non capisco come si inizializza la lista, cioè come si inseriscono gli elementi. mi date una mano?

Codice HTML:
#include <stdio.h>

struct nodo 
{
	int elem;
	struct nodo *next;
};

typedef struct nodo listaElem;
typedef struct nodo *listaPtr;

listaPtr eliminaPrimo(listaPtr l, int k){
         
         listaPtr prev, curr, tempPtr;
         
         if(k==l->elem){
                        tempPtr=l;
                        l=l->next;
                        free(tempPtr);
                        return l;}
                        
         else{
              prev=l;
              curr=l->next;
              while((curr!=NULL) && (curr->elem != k)){
                                 prev=curr;
                                 curr=curr->next;}
                                 
              if(curr!=NULL){
                             tempPtr=curr;
                             prev->next=curr->next;
                             free(tempPtr);
                             return l;
                             }
                             return l;}
}

int main(){
    
    int n=0;
    int k=0;
    int i=0;
    
    scanf("%d", &n); numero di elementi della lista
    scanf("%d", &k);  elemento da eliminare

    
    
    
}
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 24-12-2007, 17:35   #2
supermario
Senior Member
 
L'Avatar di supermario
 
Iscritto dal: Oct 2001
Messaggi: 7906
non vedo malloc nel tuo codice, sostanzialmente gli elementi della lista si creano così e poi si aggiornano i link

vuoi fare un inserimento in testa quindi basta aggiornare i link per ogni malloc senza scorrere la lista

la malloc dovrebbe essere una cosa del tipo

elemento = (struct *)malloc(sizeof(struct));
supermario è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2007, 13:28   #3
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
sisi questo piu o meno lo sapevo, ma non so proprio come scrivere tutto il codice per l'inserimento degli elementi, compreso la scanf. puoi darmi una mano?


grazie mille
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 26-12-2007, 13:14   #4
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
ho riscritto tutto piu semplice per capire bene due cose

1-è giusta la dichiarazione della struttura/lista?

2-mi aiutate a scrivere il codice per inserire gli elementi in testa?
Codice HTML:
#include <stdio.h>

struct nodo
{
       int elem;
       struct nodo *next;};
       
typedef struct nodo *listaPtr;
typedef struct nodo *listaElem;     

listaPtr eliminaPrimo(listaPtr l, int k){
         
         
         
         
         
         
         }





int main(){
    
    int n=0;
    int k=0;
    
    scanf("%d", &n);  /*INSERISCO IL NUMERO DI ELEMENTI DELLA LISTA*/
    
    elem = (struct *)malloc(sizeof(struct));
    /*INSERIRE ELEMENTI LISTA SEMPRE IN TESTA*/
    
    scanf("%d", &k);  /*INSERISCO IL NUMERO DA ELIMINARE*/
    
    
    
    
    
    
}
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 26-12-2007, 14:35   #5
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da xbubbax Guarda i messaggi
1-è giusta la dichiarazione della struttura/lista?

2-mi aiutate a scrivere il codice per inserire gli elementi in testa?
Mi sfugge qualcosa .... non avevo già fatto un esempio in <questa> discussione? (beh, avevo fatto l'esempio solo di un "append" .... l'inserimento in testa però è ancora più semplice).


Ok ... faccio un esempio più completo:

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

typedef struct node
{
    int          data;
    struct node *next;
} NODE, *PNODE, **PPNODE;

int List_AddFirst (PPNODE pproot, int data)
{
    PNODE pnode;

    if (pproot == NULL)
        return 0;

    if ((pnode = (PNODE) malloc (sizeof (NODE))) == NULL)
        return 0;

    pnode->data = data;
    pnode->next = *pproot;

    *pproot = pnode;
    return 1;
}

int List_AddLast (PPNODE pproot, int data)
{
    PNODE pnode;

    if (pproot == NULL)
        return 0;

    if ((pnode = (PNODE) malloc (sizeof (NODE))) == NULL)
        return 0;

    pnode->data = data;
    pnode->next = NULL;

    while (*pproot != NULL)
        pproot = &(*pproot)->next;
    
    *pproot = pnode;
    return 1;
}

int List_Free (PPNODE pproot)
{
    PNODE pnode, pnode_t;

    if (pproot == NULL)
        return 0;

    pnode = *pproot;

    while (pnode != NULL)
    {
        pnode_t = pnode->next;
        free (pnode);
        pnode = pnode_t;
    }

    *pproot = NULL;
    return 1;
}


int main (void)
{
    PNODE proot = NULL, pnode;

    List_AddLast (&proot, 27);
    List_AddLast (&proot, 7);
    List_AddLast (&proot, 87);
    List_AddFirst (&proot, 5);
    List_AddFirst (&proot, 2);

    pnode = proot;

    while (pnode != NULL)
    {
        printf ("%d\n", pnode->data);
        pnode = pnode->next;
    }

    List_Free (&proot);

    return 0;
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 26-12-2007, 17:59   #6
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
si in effetti gia mi avevi aiutato ma ora ho dimenticato come si fa

ora do un'occhiata a quello che hai scritto
grazie
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 26-12-2007, 18:02   #7
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
nell'esempio che hai postato in questa discussione cosa mi serve a me?

cioè perchè hai fatto delle funzioni? le devo usare per inserire gli elementi?
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 26-12-2007, 18:18   #8
marko.fatto
Senior Member
 
L'Avatar di marko.fatto
 
Iscritto dal: Jul 2007
Messaggi: 499
le funzioni non sono necessarie ma molto utili... quelle che ti servono a te sono un po' tutte
__________________
marko.fatto è offline   Rispondi citando il messaggio o parte di esso
Old 26-12-2007, 18:25   #9
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
allora, ho fatto tutto il programma aiutandomi con i vari post del forum, il programma deve eliminare la prima occorrenza di un elemento k dalla lista. non so perchè mi da errore però

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

/*STRUTTURA*/
struct list                    
{
       int value;
       struct list *nextPtr;};
       
/*INIZIALIZZAZIONE*/   
    
void init(struct list **ptrPtr){
     ptrPtr==NULL;}

/*INSERIMENTO IN TESTA*/

void preinsert(struct list **ptrPtr, int value)
{
     struct list *tmpPtr;
     tmpPtr= *ptrPtr;
     *ptrPtr=(struct list*) malloc(sizeof(struct list));
     (*ptrPtr)->nextPtr=tmpPtr;
     (*ptrPtr)->value=value;}      

listaPtr eliminaPrimo(listaPtr l, int k)
{
         listaPtr prev,curr,tempPtr;
         if(k==l->elem){
                        tempPtr=l;
                        l=l->next;
                        free(tempPtr);
                        return l;}
                        
                        else{
                             prev=l;
                             curr=l->next;
                             while((curr!=NULL)&&(curr->elem!=k)){
                                                                  prev=curr;
                                                                  curr=curr->next;}
                                                                  
                        if(curr!=NULL){
                                       tempPtr=curr;
                                       prev->next=curr->next;
                                       free(tempPtr);
                                       return l;}
                                       return l;}
         
         

int main(){
    
    struct list *ptr;
    
    int n=0;
    int valore=0;
    int k=0;
    int i=0;
    init(&ptr);
    
    scanf("%d", &n);  /*INSERISCO IL NUMERO DI ELEMENTI DELLA LISTA*/
    
    for(i=0;i<n;i++){
                     scanf("%d", &valore);
                     preinsert(&ptr,valore);}
    
    
    scanf("%d", &k);  /*INSERISCO IL NUMERO DA ELIMINARE*/
    
    
    
    
    
    
}
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 27-12-2007, 14:51   #10
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
mi aiutate a trovare l'errore?
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 28-12-2007, 10:41   #11
marko.fatto
Senior Member
 
L'Avatar di marko.fatto
 
Iscritto dal: Jul 2007
Messaggi: 499
dov'è dichiarato listaPtr come tipo?

perché non richiami la funzione per eliminare nel main?


che errori e dove te li da?
__________________
marko.fatto è offline   Rispondi citando il messaggio o parte di esso
Old 29-12-2007, 15:37   #12
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Bastava cambiare così il ciclo for nel main (e comunque bastava un while ):
Codice:
for (i = 0; i < n; i++) {
	listaPtr t = malloc(sizeof(struct list));

	scanf("%d", &valore);
	t->value = valore;
	t->nextPtr = ptr;
	ptr = t;
}
Buoni homework.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 02-01-2008, 13:40   #13
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
ho provato a riscrivere tutto ma mi da qualche errore nel main

Ultima modifica di xbubbax : 02-01-2008 alle 13:42.
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 02-01-2008, 13:43   #14
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
Codice HTML:
#include <stdio.h>

struct nodo{
       int elem;
       struct nodo *next;
       };

typedef struct nodo  L_ELEM;
typedef struct nodo *listaPtr;

listaPtr eliminaPrimo(listaPtr l, int k)
{
	listaPtr prev,curr,tempPtr;
	if (k==l->elem){
		tempPtr=l;
		l=l->next;
		free(tempPtr);
		return l;
	}
	else{
		prev=l;
		curr=l->next;
		while ((curr!=NULL) && (curr->elem != k)){
			prev=curr;
			curr=curr->next;
		}
		if (curr !=NULL){
			tempPtr=curr;
			prev->next=curr->next;
			free(tempPtr);
			return l;
		}
		return l;

	}

int main(){
    
    struct nodo *l;
    
    int i=0;
    int n=0;
    int valore=0;
    int k=0;
    
    scanf("%d", &n);
    
    for(i=0;i<n;i++){
                     listaPtr l=malloc(sizeof(struct nodo));
                     
                     scanf("%d", &valore);
                     l->elem=valore;
                     l->next=listaPtr;
                     listaPtr=l;}
    
    scanf("%d", &k);
    
}
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 02-01-2008, 13:52   #15
supermario
Senior Member
 
L'Avatar di supermario
 
Iscritto dal: Oct 2001
Messaggi: 7906
quando fai l'allocazione della struttura ti conviene fare il casta puntatore
supermario è offline   Rispondi citando il messaggio o parte di esso
Old 02-01-2008, 13:56   #16
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
cioè?
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 02-01-2008, 13:58   #17
marko.fatto
Senior Member
 
L'Avatar di marko.fatto
 
Iscritto dal: Jul 2007
Messaggi: 499
Codice:
listaPtr l=(listaPtr)malloc(sizeof(struct nodo));
__________________
marko.fatto è offline   Rispondi citando il messaggio o parte di esso
Old 02-01-2008, 14:00   #18
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
grazie ora provo
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 02-01-2008, 14:01   #19
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
non va, secondo me ho sbagliato qualcosa nelle dichiarazioni
Codice HTML:
#include <stdio.h>

struct nodo{
       int elem;
       struct nodo *next;
       };

typedef struct nodo  L_ELEM;
typedef struct nodo *listaPtr;

listaPtr eliminaPrimo(listaPtr l, int k)
{
	listaPtr prev,curr,tempPtr;
	if (k==l->elem){
		tempPtr=l;
		l=l->next;
		free(tempPtr);
		return l;
	}
	else{
		prev=l;
		curr=l->next;
		while ((curr!=NULL) && (curr->elem != k)){
			prev=curr;
			curr=curr->next;
		}
		if (curr !=NULL){
			tempPtr=curr;
			prev->next=curr->next;
			free(tempPtr);
			return l;
		}
		return l;

	}

int main(){
    
    struct nodo *l;
    
    int i=0;
    int n=0;
    int valore=0;
    int k=0;
    
    scanf("%d", &n);
    
    for(i=0;i<n;i++){
                     listaPtr l=(listaPtr)malloc(sizeof(struct nodo));
                     
                     scanf("%d", &valore);
                     l->elem=valore;
                     l->next=listaPtr;
                     listaPtr=l;}
    
    scanf("%d", &k);
    
}
xbubbax è offline   Rispondi citando il messaggio o parte di esso
Old 02-01-2008, 14:26   #20
xbubbax
Senior Member
 
Iscritto dal: Apr 2007
Messaggi: 381
qualcuno mi da una mano a controllare la parte sull'inserimento degli elementi?

non capisco dove sbaglio
xbubbax è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media AMD Ryzen 5 7500X3D: la nuova CPU da gaming con ...
SONY BRAVIA 8 II e BRAVIA Theatre System 6: il cinema a casa in formato compatto SONY BRAVIA 8 II e BRAVIA Theatre System 6: il c...
KTC H27E6 a 300Hz e 1ms: come i rivali ma a metà prezzo KTC H27E6 a 300Hz e 1ms: come i rivali ma a met&...
Grazie ai dati di ESA il calcolo della t...
Rilasciati nuovi video e immagini della ...
Gli astronauti cinesi di Shenzhou-20 son...
Mai così tanti gas serra: il 2025...
Google condannata in Germania: favorito ...
Ubisoft rimanda i risultati finanziari e...
ADATA porta i primi moduli DDR5 CUDIMM 4...
Bob Iger anticipa le novità AI di...
Microsoft Teams 'spierà' i dipend...
Michael Burry chiude Scion e fa di nuovo...
Huawei prepara i nuovi Mate 80: fino a 2...
Una e-Mountain Bike di qualità ma...
Tutte le offerte Amazon Black Friday pi&...
DJI Mini 4K Fly More Combo con 3 batteri...
Crollo di prezzo sui nuovissimi iPhone A...
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: 07:56.


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