|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
|
[C] Liste bidirezionali
ragazzi potreste farmi un esempio di liste bidirezionali?
nn capisco come mi devo comportare nel caso in cui sia il primo elemento, devo associargli null al puntatore all'elemento precedente? |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Re: [C] Liste bidirezionali
Quote:
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
|
Codice:
typedef struct nodoBi{
int numero;
struct nodoBi *pProx;
struct nodoBi *pPrec;
}nodoBi;
void inserisci_elementi(nodoBi **ppNodo,int elem);
void stampa_elem(nodoBi *pNodo,int contr);
int main()
{
nodoBi *pTesta;
pTesta = NULL;
inserisci_elementi(&pTesta,15);
inserisci_elementi(&pTesta,3);
inserisci_elementi(&pTesta,64);
inserisci_elementi(&pTesta,6);
inserisci_elementi(&pTesta,34);
stampa_elem(pTesta,2);
stampa_elem(pTesta,1);
system("PAUSE");
return 0;
}
void stampa_elem(nodoBi *pNodo,int contr){
nodoBi *Punt;
Punt = pNodo;
puts("*****************************************");
while(Punt != NULL){
switch (contr){
case 1:
if((Punt->pPrec != NULL) && (Punt->pProx!=NULL)){
printf("Precedente: %d || Corrente: %d || Successivo: %d\n",Punt->pPrec->numero,Punt->numero,Punt->pProx->numero);
}
break;
case 2:
printf("Numero: %d\n",Punt->numero);
break;
}
Punt=Punt->pProx;
}
}
void inserisci_elementi(nodoBi **ppNodo,int elem){
nodoBi *Punt,*pPreced,*pProxi;
pPreced = NULL;
pProxi = *ppNodo;
while((pProxi != NULL) && (pProxi->numero < elem)){
pPreced = pProxi;
pProxi = pProxi->pProx;
}
Punt = (nodoBi*)malloc(sizeof(nodoBi));
Punt->numero = elem;
Punt->pProx = pProxi;
Punt->pPrec = pPreced;
if(pPreced != NULL){
pPreced->pProx = Punt;
}else{
*ppNodo = Punt;
Punt->pPrec = NULL;
}
}
if((Punt->pPrec != NULL) && (Punt->pProx!=NULL)){ da errore e esce.. cosa sbaglio? ciao |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
|
ho trovato un altro errore se l'elemento quando viene inserito capita in testa e poi viene spostato il suo valore rimarrà null..come risolvo?
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
|
Quote:
else{ (*ppNodo)->pPrec = *ppNodo; *ppNodo = Punt; Punt->pPrec = NULL; } ma non va..HELP! |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8896
|
Codice:
#include <stdio.h>
#include <stdlib.h>
typedef struct EL {
int iVal;
struct EL *pNext;
struct EL *pPrec;
} Node;
void visualizza (Node *pEl){
if (pEl==NULL) return;
printf ("\nElement:\t%d",pEl->iVal);
visualizza(pEl->pNext);
}
void ins_head (Node **pTesta, int iValue){
Node *pApp;
pApp = (Node*)malloc(sizeof(Node));
pApp->iVal = iValue;
pApp->pNext = *pTesta;
pApp->pPrec = NULL;
*pTesta = pApp;
}
void ins_ord (Node **pTesta, int iValue){
Node *pApp, *pSup, *pPrec;
pApp = (Node*)malloc(sizeof(Node));
pApp->iVal = iValue;
pSup = *pTesta;
pPrec = NULL;
while (pSup!=NULL && pSup->iVal < pApp->iVal){
pPrec=pSup;
pSup=pSup->pNext;
}
if (pPrec == NULL){
pApp->pNext = pApp->pPrec = NULL;
*pTesta = pApp;
}
else{
pPrec->pNext = pApp;
pApp->pNext = pSup;
pApp->pPrec = pPrec;
if (pSup != NULL){
pSup->pPrec = pApp;
}
}
}
int main (void){
Node *Testa;
Node *TestaOrdinata;
TestaOrdinata = NULL;
Testa = NULL;
ins_head (&Testa,3);
ins_head (&Testa,4);
ins_head (&Testa,5);
ins_ord (&TestaOrdinata,3);
ins_ord (&TestaOrdinata,4);
ins_ord (&TestaOrdinata,5);
visualizza (Testa);
printf ("\n\n");
visualizza (TestaOrdinata);
printf ("\n\n");
system ("PAUSE");
return (0);
}
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
|
mi perde il primo elemento così
Codice:
void inserisci_elementi(nodoBi **ppNodo,int elem){
nodoBi *Punt,*pPreced,*pProxi;
pPreced = NULL;
pProxi = *ppNodo;
while((pProxi != NULL) && (pProxi->numero < elem)){
pPreced = pProxi;
pProxi = pProxi->pProx;
}
Punt = (nodoBi*)malloc(sizeof(nodoBi));
Punt->numero = elem;
Punt->pProx = pProxi;
Punt->pPrec = pPreced;
if (pPreced == NULL){
Punt->pProx = Punt->pPrec = NULL;
*ppNodo = Punt;
}
else{
pPreced->pProx = Punt;
Punt->pProx = pProxi;
Punt->pPrec = pPreced;
if (pProxi != NULL){
pProxi->pPrec = Punt;
}
}
}
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8896
|
scusa mi son dimenticato di postarti l'ultima versione che avevo fatto
Codice:
#include <stdio.h>
#include <stdlib.h>
typedef struct EL {
int iVal;
struct EL *pNext;
struct EL *pPrec;
} Node;
void visualizza (Node *pEl){
if (pEl==NULL) return;
printf ("\nElement:\t%d",pEl->iVal);
visualizza(pEl->pNext);
}
void ins_head (Node **pTesta, int iValue){
Node *pApp;
pApp = (Node*)malloc(sizeof(Node));
pApp->iVal = iValue;
pApp->pNext = *pTesta;
pApp->pPrec = NULL;
*pTesta = pApp;
}
void ins_ord (Node **pTesta, int iValue){
Node *pApp, *pSup, *pPrec;
pApp = (Node*)malloc(sizeof(Node));
pApp->iVal = iValue;
pSup = *pTesta;
pPrec = NULL;
while (pSup!=NULL && pSup->iVal < pApp->iVal){
pPrec=pSup;
pSup=pSup->pNext;
}
if (pPrec == NULL){
pApp->pNext = *pTesta;
pApp->pPrec = NULL;
*pTesta = pApp;
}
else{
pPrec->pNext = pApp;
pApp->pNext = pSup;
pApp->pPrec = pPrec;
if (pSup != NULL){
pSup->pPrec = pApp;
}
}
}
int main (void){
Node *Testa;
Node *TestaOrdinata;
TestaOrdinata = NULL;
Testa = NULL;
ins_head (&Testa,3);
ins_head (&Testa,4);
ins_head (&Testa,5);
ins_ord (&TestaOrdinata,3);
ins_ord (&TestaOrdinata,2);
ins_ord (&TestaOrdinata,4);
ins_ord (&TestaOrdinata,5);
visualizza (Testa);
printf ("\n\n");
visualizza (TestaOrdinata);
printf ("\n\n");
system ("PAUSE");
return (0);
}
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:54.



















