Gdzie mam błąd?

0

Czołem!!
Potrzebuję pomocy w takiej oto sprawie. Mam jakieś błędy w <ort>usuUUUUwaniu</ort> z listy dwukierunkowej i nie mogę ich zlokalizować. Poniżej zamieszczam kod ort! z listy dwukierunkowej:

struct listaD *usun(int miejsce, struct listaD *poczatek)
 {
  struct listaD *pom1;
  if(poczatek==NULL)       
  return poczatek;
  if(miejsce==0)
  {
   pom1=poczatek->nastepny;
   free(poczatek);
   if(pom1->poprzedni==NULL)
   return pom1;
  }
 }
 struct listaD *pom1, *pom2;
 pom1=poczatek;
 while(--miejsce && pom1->nastepny)
 pom1=pom1->nastepny;
 pom2=pom1->nastepny->nastepny;
 free(pom1->nastepny)
 pom1->nastepny=pom2;
 if(pom2!=NULL)
 pom2->poprzedni=pom1;
 return poczatek;
 }
}

// skuwka / zasuwka [mf]

0

Cos nie widac na tym listingu poczatku petli do - jest tylko while, no chyba ze to jakis skrocony zapis ktorego nie znam...

0

W pętli while mam jakiś błąd (declaration termineted incorrectly), ale najgorzej jest linijkę nad pętlą, są tam aż trzy błędy.

0

Twoja funkcja konczy sie przed linia :

struct listaD *pom1, *pom2;

Masz po prostu o jeden nawias klamrowy za duzo i reszta instrukcji lezy poza cialem funkcji USUŃ.

Pozdrowka,
Ray

0

a jesli nawet tak mialo byc, to z tego kawalka kodu nie mozna wywnioskowac gdzie wlasciwie umiejscowiona w programie jest ta druga polowa kodu - i na koncu znow dwa zamykajace nawiasy klamrowe - nie wiadomo CO one zamykaja...

0

No więc zamieszczam cały kod programu:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

struct listaD {int wartosc; struct listaD *nastepny; struct listaD *poprzedni;};

struct listaD *dodaj(int war, int miejsce, struct listaD *poczatek)

{
struct listaD *wsk,*pom1,pom2;
wsk=(struct listaD
)malloc(sizeof(struct listaD));
wsk->wartosc=war;
wsk->poprzedni=NULL; wsk->nastepny=NULL;
if (miejsce==0||poczatek==NULL)
{
wsk->nastepny=poczatek;
if(poczatek!=NULL)
{
poczatek->poprzedni=wsk;
}
return wsk;
}
else{pom1=poczatek;
while(--miejsce&&pom1->nastepny)
pom1=pom1->nastepny;
pom2=pom1->nastepny;
wsk->nastepny=pom2;
wsk->poprzedni=pom1;
pom1->nastepny=wsk;
if(pom2!=NULL)
{
pom2->poprzedni=wsk;
}
return poczatek;
}

{
struct listaD *pom1;
if(poczatek==NULL)
return poczatek;
if(miejsce==0)
{
pom1=poczatek->nastepny;
free(poczatek);
if(pom1->poprzedni==NULL);
return pom1;
}
}
pom1=poczatek->poprzedni;
while((--miejsce) && (pom1 ->nastepny));
free(pom1->nastepny=pom2);
if (pom2!=NULL)
pom2->poprzedni=pom1;
return poczatek;
}

struct listaD *usun(int miejsce, struct listaD *poczatek)
{
struct listaD *pom1;
if(poczatek==NULL)
return poczatek;
if(miejsce==0)
{
pom1=poczatek->nastepny;
free(poczatek);
if(pom1->poprzedni==NULL)
return pom1;
}
}
struct listaD *pom1, *pom2;
pom1=poczatek;
while(--miejsce && pom1->nastepny)
pom1=pom1->nastepny;
pom2=pom1->nastepny->nastepny;
free(pom1->nastepny)

pom1->nastepny=pom2;
if(pom2!=NULL)
pom2->poprzedni=pom1;
return poczatek;
}
}

void pokaz(struct listaD *pocz)
{
int suma=0;;
struct listaD *biezacy=pocz;
while(biezacy>0)
{
printf("%d\n",biezacy->wartosc);
suma=suma+biezacy->wartosc;
biezacy=biezacy->nastepny;
}
printf("\nSuma elementów stosu = %d\n",suma);
}

void main()
{
struct listaD * start=NULL;
start=dodaj(1,0,start);
pokaz(start);
start=dodaj(2,0,start);
start=dodaj(0,3,start);
pokaz(start);

}

1 użytkowników online, w tym zalogowanych: 0, gości: 1