Torna indietro   Hardware Upgrade Forum > Software > Programmazione

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à prezzo
KTC lancia il nuovo monitor gaming H27E6, un modello da 27 pollici che promette prestazioni estreme grazie al pannello Fast IPS con risoluzione 2K QHD (2560x1440). Il monitor si posiziona come una scelta cruciale per gli appassionati di eSport e i professionisti creativi, combinando una frequenza di aggiornamento di 300Hz e un tempo di risposta di 1ms con un'eccezionale fedeltà cromatica
Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Realizzato da Lenovo e installato presso il Cineca di Casalecchio di Reno, Pitagora offre circa 44 PFlop/s di potenza di calcolo ed è dedicato alla simulazione della fisica del plasma e allo studio dei materiali avanzati per la fusione, integrandosi nell’ecosistema del Tecnopolo di Bologna come infrastruttura strategica finanziata da EUROfusion e gestita in collaborazione con ENEA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Rullo di lavaggio dei pavimenti abbinato a un potente motore da 28.000 Pa e a bracci esterni che si estendono: queste, e molte altre, le caratteristiche tecniche di Z60 Ultra Roller Complete, l'ultimo robot di Mova che pulisce secondo le nostre preferenze oppure lasciando far tutto alla ricca logica di intelligenza artificiale integrata
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


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&...
Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare Cineca inaugura Pitagora, il supercomputer Lenov...
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA Mova Z60 Ultra Roller Complete: pulisce bene gra...
Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
GeForce RTX 50 SUPER cancellate o rimand...
Windows 11 si prepara a vibrare: Microso...
La “Burnout Season” colpisce l’Italia: i...
QNAP annuncia il JBOD TL-R6020Sep-RP: ol...
Siemens e NVIDIA uniscono le forze: arri...
Ricarica veloce e durata batteria: miti ...
Le "navi volanti" di Candela a...
Bambini su misura? Il caso della startup...
Iliad porta le SIM Express in edicola: r...
Offerte Amazon sui TV Mini LED Hisense 2...
Il silenzio digitale che fa male: come i...
Il responsabile del programma Cybertruck...
Domanda alle stelle per SSD e RAM: in Gi...
Zuckerberg vuole eliminare tutte le mala...
Otto suicidi, un solo chatbot: si moltip...
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: 20:57.


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