Majac utworzona liste minimum 5 elementow, napisz funkcje ze zmianami elementu


Majac utworzona liste - minimum 5 elementow, napisz funkcje:
a) zamiany elementu pierwszego z ostatnim
b) zamiany elementu pierwszego z drugim
c) zamiany elementu ostatniego z przedostatnim




#include
#include
#include

struct lista
{
int el;
struct lista *nast, *poprz;
};

void stworzenie (struct lista **pocz, struct lista **kon, int i)
{
struct lista *nowy;

nowy=NULL;

nowy=(struct lista *) malloc (sizeof(struct lista));

if (nowy==NULL)
{
printf("zabrak^o pamieci\n");
exit(1);
}

nowy->el=i;

if ((*pocz)==NULL)
{
(*pocz)=nowy;
(*kon)=nowy;
(*kon)->nast=NULL;
(*pocz)->poprz=NULL;
}
else
{
(*kon)->nast=nowy;
nowy->poprz=(*kon);
(*kon)=nowy;
(*kon)->nast=NULL;
}
}

void wypisanie (struct lista **pocz)
{
struct lista *pomoc;

pomoc=(*pocz);
while (pomoc!=NULL)
{
printf("element wynosi: %d \n", pomoc->el);
pomoc=pomoc->nast;
}
}

void zamiana_pierwszego_z_ostatnim (struct lista **pocz, struct lista **kon)
{
struct lista *nowy_pocz, *nowy_kon, *pomoc, *pomoc2;

nowy_pocz=NULL;
nowy_kon=NULL;
pomoc=NULL;
pomoc2=NULL;
pomoc=(*pocz)->nast;
pomoc2=(*kon)->poprz;

nowy_pocz=(*kon);
nowy_pocz->nast=(*pocz)->nast;
nowy_pocz->poprz=NULL;

nowy_kon=(*pocz);
nowy_kon->poprz=(*kon)->poprz;
nowy_kon->nast=NULL;

(*pocz)=nowy_pocz;
(*pocz)->poprz=NULL;
pomoc->poprz=(*pocz);
(*pocz)->nast=pomoc;

(*kon)=nowy_kon;
(*kon)->nast=NULL;
pomoc2->nast=(*kon);
(*kon)->poprz=pomoc2;
}

void zamiana_pierwszego_z_drugim (struct lista **pocz)
{
struct lista *nowy_pocz, *nowy_drugi, *drugi, *pomoc;
pomoc=(*pocz)->nast->nast;
drugi=(*pocz)->nast;

nowy_pocz=drugi;
nowy_pocz->nast=(*pocz);
nowy_pocz->poprz=NULL;

nowy_drugi=(*pocz);
nowy_drugi->nast=pomoc;
nowy_drugi->poprz=nowy_pocz;
pomoc->poprz=nowy_drugi;


(*pocz)=nowy_pocz;
(*pocz)->poprz=NULL;

nowy_drugi->poprz=(*pocz);
(*pocz)->nast=nowy_drugi;

pomoc->poprz=(*pocz)->nast;
(*pocz)->nast->nast=pomoc;
}

void zamiana_ostatniego_z_przedostatnim (struct lista **kon)
{
struct lista *nowy_kon, *nowy_przedost, *pomoc;
nowy_kon=NULL;
nowy_przedost=NULL;
pomoc=NULL;
pomoc=(*kon)->poprz->poprz;
nowy_kon=(*kon)->poprz;
nowy_przedost=(*kon);

nowy_kon->nast=NULL;
nowy_kon->poprz=(*kon);

nowy_przedost->nast=(*kon)->poprz;
pomoc->nast=nowy_przedost;
nowy_przedost->poprz=pomoc;

(*kon)=nowy_kon;
(*kon)->nast=nowy_kon->nast;

(*kon)->poprz=nowy_przedost;
pomoc->nast=(*kon)->poprz;
(*kon)->poprz->poprz=pomoc;
}

int main ()
{
int i;
struct lista *pocz, *kon;
clrscr();

pocz=NULL;
kon=NULL;

for (i=0;i<5;i++)
{
stworzenie (&pocz, &kon, i);
}

wypisanie (&pocz);

printf("\nZamiana_pierwszego_z_ostatnim \n");
zamiana_pierwszego_z_ostatnim (&pocz, &kon);

wypisanie (&pocz);
zamiana_pierwszego_z_ostatnim (&pocz, &kon); /*zeby elementy powrocily do stanu poczatkowego*/

printf("\nzamiana_pierwszego_z_drugim\n");
zamiana_pierwszego_z_drugim (&pocz);

wypisanie (&pocz);
zamiana_pierwszego_z_drugim (&pocz); /*zeby elementy powrocily do stanu poczatkowego*/

printf("\nzamiana_ostatniego_z_przedostatnim\n");
zamiana_ostatniego_z_przedostatnim (&kon);

wypisanie (&pocz);
zamiana_ostatniego_z_przedostatnim (&kon); /*zeby elementy powrocily do stanu poczatkowego*/

while(!kbhit());
return 0;
}

Wyszukiwarka

Podobne podstrony:
Napisz funkcje obliczajaca wartosc X do potegi K tej K liczba
Napisz funkcje obliczajaca przekatna prostokata
Napisz funkcje ktora liczy pole kola na podstawie przekazanego jako
oswoic sie ze zmianami
kod[waz ze zmiana asm]
ze zmiana 2a
RIAA stab MONTAZ ze zmianami
Dr Berrenda Fox O Nowym DNA i Jak Sobie Radzić Ze Zmianami
Postepowanie ze zmiana konstyt
Starty ze zmianą kierunku biegu cz 4
matura 2012 zapoznaj się ze zmianami
Rozgrzewka grupowa ze zmianą pasów

więcej podobnych podstron