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