Jednosmerný lineárny zoznam

Riešenia


Úloha 11

#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)); /* vytvorenie prvého prvku */
  TPrvok *novy, *pom;
  int i, x;

  printf("prvok = ");
  scanf("%d", &(prvy->hodnota));
  prvy->dalsi = NULL;


  for (i = 2; i <= n; i++) {
     printf("prvok = ");
     scanf("%d", &x);  /* načítanie hodnoty zo vstupu */
     pom = prvy;   /* pomocou ukazovateľa pom prechádzame zoznamom */

     /* nájdeme správne miesto pre nový prvok */
     int  b = 1;
     while ((x > pom->hodnota) && b) {
       if (pom->dalsi != NULL) pom = pom->dalsi;
       else b = 0;
     }

     /* po skončení cyklu while pom ukazuje na prvok, pred ktorý treba vloži?
         nový prvok resp. ukazuje na posledný prvok, ak je x zatiaľ  najvačšia  hodnota 
      */ 
      
     novy = (TPrvok*)malloc(sizeof(TPrvok)); /* alokujeme pamä? pre nový prvok */

     if ((pom == prvy) && (x < pom->hodnota)){ /* pridanie na začiatok */
       novy->hodnota = x;
       novy->dalsi = prvy;
       prvy = novy;
     }
     else if (!b) {  /* pridanie na koniec */
            pom->dalsi = novy;
            novy->hodnota = x;
            novy->dalsi = NULL;
          }
          else {  /* pridanie do vnútra na správne miesto */
            novy->hodnota = pom->hodnota;   /*  výmena hodnôt */
            pom->hodnota = x;
            novy->dalsi = pom->dalsi;  /* nový vkladáme ZA */
            pom->dalsi = novy;
          }
  } 
  return(prvy);
}
---------------------------------------------------------------------
void vypis(TPrvok *p)
{
   while (p != NULL) {
      printf("%d ", p->hodnota);
      p = p->dalsi;
   }
}
---------------------------------------------------------------------
void main(void)  /* hlavný program */
{
  TPrvok *zoznam;
  int n;

  clrscr();
  printf("Pocet prvkov zoznamu N = ");
  scanf("%d", &n);

  if (n>0) {
    zoznam = vytvor(n);
    printf("\nUsporiadany zoznam: ");
    vypis(zoznam);
  }
  else printf("Zoznam musi obsahovat aspon 1 prvok!");
  getch();
}