Jednosmerný lineárny zoznam

Riešenia


Úloha 12

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

typedef struct prvok {
  int hodnota;
  struct prvok *dalsi;
} TPrvok;
---------------------------------------------------------------------------
TPrvok *vytvor(int n)
{
   TPrvok *prvy = (TPrvok*)malloc(sizeof(TPrvok));
   TPrvok *posl, *novy;

   printf("prvok = ");
   scanf("%d", &(prvy->hodnota)); /* vytvorenie prvého prvku */
   prvy->dalsi = NULL;
   posl = prvy;

   for (int i = 2; i <= n; i++) {
     novy = (TPrvok*)malloc(sizeof(TPrvok));
     printf("prvok = ");
     scanf("%d", &(novy->hodnota));
     novy->dalsi = NULL;
     posl->dalsi = novy;
     posl = novy;
   }
   return(prvy);
}
---------------------------------------------------------------------------
void vypis(TPrvok *p)
{
   while (p != NULL) {
      printf("%d ", p->hodnota);
      p = p->dalsi;
   }
}
---------------------------------------------------------------------------
void usporiadaj(TPrvok *z)  /* triedenie priamym výberom */
{
  TPrvok *min, *pom, *od;
  int x;

  od = z;
  while (od->dalsi != NULL) {
    pom = od;
    min = pom;
    pom = pom->dalsi;
    
    /* nájdeme minimum */
    while (pom != NULL) {  
       if (pom->hodnota < min->hodnota)  min = pom;
       pom = pom->dalsi;
    }

    x = min->hodnota;  /* výmena hodnôt */
    min->hodnota = od->hodnota;
    od->hodnota = x;

    od = od->dalsi;
  }
}
---------------------------------------------------------------------------
void main(void)  /* hlavný program */ 
{
   int n;
   TPrvok *zoznam;

   clrscr();
   printf("Pocet prvkov zoznamu N = ");
   scanf("%d", &n);
   if (n > 0) {
     zoznam = vytvor(n);
     clrscr();
     printf("\nPovodny zoznam: ");
     vypis(zoznam);

     usporiadaj(zoznam);

     printf("\nUsporiadany zoznam: ");
     vypis(zoznam);
   }
   else printf("Zoznam musi obsahovat aspon 1 prvok !");
   getch();
}