View Full Version : [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?
Originariamente inviato da SteR9
devo associargli null al puntatore all'elemento precedente?
certo
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;
}
}
ho provato a fare così però se nn metto l'
if((Punt->pPrec != NULL) && (Punt->pProx!=NULL)){
da errore e esce.. cosa sbaglio?
ciao :)
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?
Originariamente inviato da SteR9
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?
ho provato facendo così nell'else
else{
(*ppNodo)->pPrec = *ppNodo;
*ppNodo = Punt;
Punt->pPrec = NULL;
}
ma non va..HELP! :muro: :)
Fenomeno85
17-02-2005, 17:31
#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);
}
~§~ Sempre E Solo Lei ~§~
mi perde il primo elemento così
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;
}
}
}
Fenomeno85
17-02-2005, 18:33
scusa mi son dimenticato di postarti l'ultima versione che avevo fatto :muro:
#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);
}
~§~ Sempre E Solo Lei ~§~
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.