Zainicjuj listę dwukierunkową losowymi liczbami z zakresu –20 20 Następnie


Zainicjuj listę dwukierunkową losowymi liczbami z zakresu
20..20. Następnie:
a) Znajdź w liście element o najmniejszej i największej wartości.
b) Element najmniejszy przenieś na początek listy, natomiast element największy na koniec. Pozostałe elementy pozostaw bez zmian.


#include
#include
#include
#include
#define N 4

struct lista
{
int liczba;
struct lista *nast;
struct lista *poprz;
};

void wypelnij (struct lista **pocz, struct lista **kon)
{
struct lista *nowy;

nowy=(struct lista *)malloc(sizeof(struct lista));
/*zakladam ze jest pamiec*/
nowy->liczba=(random(41)-20);
if ((*pocz)==NULL)
{
(*pocz)=nowy;
(*kon)=nowy;
(*pocz)->poprz=NULL;
(*kon)->nast=NULL;
}
else
{
(*kon)->nast=nowy;
nowy->poprz=(*kon);
(*kon)=nowy;
(*kon)->nast=NULL;
}
}

void znajdz (struct lista **pocz, struct lista **kon)
{
int najmniejszy=0, najwiekszy=0;
struct lista *pomoc;
struct lista *pomoc2;
struct lista *nowy_pocz;
struct lista *nowy_kon;

najmniejszy=((*pocz)->liczba);
najwiekszy=((*pocz)->liczba);
pomoc=(*pocz);
while(pomoc!=NULL)
{
if ((pomoc->liczba) {
najmniejszy=pomoc->liczba;
}
if ((pomoc->liczba)>najwiekszy)
{
najwiekszy=pomoc->liczba;
}
pomoc=pomoc->nast;
}

nowy_pocz=NULL;
nowy_kon=NULL;
pomoc=(*pocz);
pomoc2=pomoc;
while(pomoc!=NULL)
{
if ((pomoc!=(*pocz))&&((pomoc->liczba)==najmniejszy))
{
nowy_pocz=pomoc;
pomoc2=pomoc2->nast;
pomoc=pomoc->poprz;

pomoc->nast=pomoc2;
pomoc2->poprz=pomoc;
nowy_pocz->nast=(*pocz);
(*pocz)->poprz=nowy_pocz;
(*pocz)=nowy_pocz;
(*pocz)->poprz=NULL;
if (pomoc2==NULL)
{
(*kon)=pomoc;
(*kon)->nast=NULL;
}
break;
}
else
{
pomoc=pomoc->nast;
pomoc2=pomoc;
}
}
pomoc=(*pocz);
pomoc2=pomoc;
while(pomoc!=NULL)
{
if((pomoc!=(*kon))&&((pomoc->liczba)==najwiekszy))
{
nowy_kon=pomoc;
pomoc2=pomoc2->nast;
pomoc=pomoc->poprz;

pomoc->nast=pomoc2;
pomoc2->poprz=pomoc;
(*kon)->nast=nowy_kon;
nowy_kon->poprz=(*kon);
(*kon)=nowy_kon;
(*kon)->nast=NULL;
if(pomoc==NULL)
{
(*pocz)=pomoc2;
(*pocz)->poprz=NULL;
}
break;
}
else
{
pomoc=pomoc->nast;
pomoc2=pomoc;
}
}
}

void wypisz (struct lista **pocz)
{
struct lista *pomoc;
int i=1;
pomoc=(*pocz);
while (pomoc!=NULL)
{
printf("element %d jest rowny %d \n",i, pomoc->liczba);
i++;
pomoc=pomoc->nast;
}
printf("\n \n");
}

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

pocz=NULL;
kon=NULL;

for (i=0;i {
wypelnij (&pocz, &kon);
}

wypisz (&pocz);

znajdz (&pocz, &kon);

wypisz (&pocz);

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

Wyszukiwarka

Podobne podstrony:
Zabawy na śniegu dodawanie i odejmowanie w zakresie 20 z przekroczeniem progu
Matematyka w prezencie (odejmowanie w zakresie 20)
Zakres obowi¦zkˇw nauczyciela Spo ecznego Gimnazjum nr 20
20 Organizacja usług dodatkowych w zakładzie hotelarskim
20 rad jak inwestowac w zloto
20 3SH~1
51 20
39 20 Listopad 2001 Zachód jest wart tej mszy

więcej podobnych podstron