PDA

View Full Version : [C]stutture dati


vpervendetta
02-02-2010, 09:16
Ciao a tutti, tra circa 10 giorni ho l'esame di informatica e in questo vi sara un quesito con l'inserimento o l'eliminazione di un elemento da una struttura dati che puo essere pila lista o coda.
Io piu o meno me la cavo con le strutture facendo i disegni dei mattoncini, ma non so se faccio correttamente, anche perche il pc magari lo stampa corretto ma ci sono errori nella forma. Qualcuno di voi potrebbe scrivermi il codice per inserire o eliminare un elemento da pila lista e coda?

Io solitamente uso

struct elemento {
int inf;
struct elemento *pun;};

!fazz
02-02-2010, 11:11
pila inserimento in testa e cancellazione in testa: sia l'inserimento che la cancellazione avvengono sul dato puntato dal puntatore alla testa della lista

coda inserimento in coda e cancellazione in testa la cancellazione avviene dal puntatore alla testa della lista mentre per l'inserimento scorri la lista fino a che *punt vale null e sostituisci quel valore con il puntatore al nuovo valore

se giochi con i blocchi vedrai che è facilissimo

vpervendetta
02-02-2010, 18:19
Si, questo lo so, ma volevo passati, se qualcuno li ha, il codice gia scritto perche magari per una cavolata mi toglie 3 punti dal compito....ad esempio ad un mio collega ha tolto qualche punto perche aveva saltato un puntatore...

Rsk
02-02-2010, 20:47
Scrivi il codice aiutandoti con un disegno e ti sapremo dire se ci sono errori

vpervendetta
09-02-2010, 15:07
Di seguito le strutture come le ho fatte io....spero vadano bene; qualcuno puo dirmi se ci sono errori? Se ce la fate fate infretta ke domani ho esame :muro:

// inserisce un elemento nella lista
struct lista * inserisci (struct lista*p){
struct lista *paus,*paus2,*paus3;

if (p-inf==5){
paus=(struct lista*)malloc (sizeof(struct lista*))
paus->pun=p;
p=paus;
p->inf=4;
return 0;
}
while (paus!=NULL){
paus=p;
paus2=paus->pun;
if(paus2->inf==5){
paus3=(struct lista*)malloc (sizeof(struct lista*));
paus3->pun=paus2;
paus->pun=paus3;
return p; }
paus=paus->pun; }
}


//elimina un elemento nella lista
struct lista * elimina (struct lista*p){
struct lista *paus,*paus2;
if (p->inf==5) p=p->pun;
paus=p;
while (paus!=NULL){
paus2=paus->pun;

if(paus2==5){paus->pun=paus2->pun;
paus2->pun=NULL;
free(paus2);
return p;}
paus=paus->pun;}
return p;
}

//elimina un elemento dalla pila
struct pila * elimina (struct pila*p){
struct *p2,*paus;
p2=NULL;

while (p!=NULL)&&(p->inf!=30){
paus=p;
p=p->pun;
paus->pun=NULL;
paus->pun=p2;
p2=paus;
paus=NULL; }

p=p->pun;

while (p2!=NULL){
paus=p2;
p2=p2->pun;
paus->pun=NULL;
paus->pun=p;
p=paus;
paus=NULL; }

return p; }



//inserisci un elemento nella pila
struct pila* inserisci (struct pila*p){
struct *p2,*paus,*paus2;
p2=NULL;


if (p->inf==5){
paus2=(struct pila*)malloc(sizeof(struct pila*));
paus2->pun=p;
p=paus2;
paus2=NULL;
return p; }
else {
while (p!=NULL)&&(p->inf==5){
paus=p;
p=p->pun;
paus->pun=p2;
p2=paus;
paus=NULL; }

paus2=(struct pila*)malloc(sizeof(struct pila*));
paus2->pun=p;
p=paus2;
paus2=NULL;
}

while (p2!=NULL){
paus=p2;
p2=p->pun;
paus->pun=p;
p=paus;
paus=NULL; }
}


//elimina un elemento nella coda
struct coda * elimina (struct coda *p *c){
struct *c2;
c2=c;

while ((p->inf!=5)&&(p!=c2)){
c->pun=p;
p=p->pun;
c=c->pun;
c->pun=NULL;}
p=p->pun;

while (p==c2){
c->pun=p;
p=p->pun; }
c->pun=p;
p=p->pun;
}


//inserisci un elemento nella coda
struct coda * inserisci (struct coda *p*c){
struct *c2*paus;
c2=c;

while (p->inf==5+1){
paus=(struct coda*)malloc(sizeof(struct coda*));
paus->inf=5;
c->pun=paus;
c=c->pun; }

while (p==c2){
c->pun=p;
p=p->pun; }
c->pun=p;
p=p->pun;
}


/inserisci un elemento nella coda
struct coda * inserisci (struct coda *p*c){
struct *c2*paus;
c2=c;

printf("\nInserisci l'elemento da inserire");
scanf("%d",&a);
while (p->inf==a+1){
c->pun=p;
p=p->pun;
c=c->pun;
c->pun=NULL;
}
paus=(struct coda *)malloc(sizeof(struct coda));
paus->inf=a;
c->pun=paus;
c=c->pun;
c->pun=NULL;
while(p!=c2){
c->pun=p;
p=p->pun;
c=c->pun;
c->pun=NULL;
}
c->pun=p;
p=p->pun;
c=c->pun;
c->pun=NULL;

vpervendetta
09-02-2010, 16:36
I miei dubbi sono soprattutto sullla coda.....gli altri piu o meno li so fare.
Ovviamente quelle messe sopra sono solo delle funzioni, non i programmi completi....