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);
}