3. Jednosmerný lineárny zoznam

3.5  Vloženie nového prvku pred označený prvok

Operáciu vloženia nového prvku pred označený prvok môžeme previesť na predchádzajúci prípad, ak poznáme ukazovateľ na prvok, ktorý bezprostredne predchádza označenému prvku. Vloženie nového prvku pred prvý prvok, teda na začiatok zoznamu je špeciálnym prípadom.

void vloz_pred(TPrvok **z, TPrvok *pred, int co)
{
  TPrvok *novy, *pom;
   
  novy = (TPrvok*)malloc(sizeof(TPrvok));
  novy->hodnota = co;
   
  if (pred == *z){ 
   novy->dalsi = *z;
   *z = novy; /* nový začiatok */
  }
  else {
    /* hľadáme predchodcu označeného prvku */
    pom = *z;
    while (pom->dalsi != pred) pom = pom->dalsi;
    
    /* spojenie nového s prvkom pred ktorý sa zaraďuje */
    novy->dalsi = pred;

    /* spojenie prvku ktorý novému predchádza s novým */
    pom->dalsi = novy; 
  }	   
}







OBRÁZOK

Vloženie prvku pred označený prvok týmto spôsobom nie je vhodné, ak sa jedná o rozsiahly zoznam. V tomto prípade vkladáme nový prvok tak, že vymeníme hodnoty nového a označeného prvku a nový prvok potom vložíme za označený prvok. Takto pracuje nasledujúca funkcia:

void vloz_pred(TPrvok *pred, int co)
{
   TPrvok *novy = (TPrvok*)malloc(sizeof(TPrvok));
   char pom;

   pom = pred->hodnota;  /* výmena */
   pred->hodnota = co;
   novy->hodnota = pom;
   
   novy->dalsi = pred->dalsi;
   pred->dalsi = novy;
 } 

Precvičme si

  Majme lineárny zoznam celých čísel, ktoré prečítame zo vstupu. Napíšte program, ktorý v danom lineárnom zozname všetky prvky zdvojí t.j. za každý prvok vloží jeden nový prvok s rovnakou hodnotou. Upravený zoznam vypíšte na obrazovku.
Napr. zo zoznamu 1, 2, 3, 4 tak vznikne zoznam 1, 1, 2, 2, 3, 3, 4, 4

[Riešenie]

  Vráťme sa opäť k nášmu pokusnému zoznamu znakov. Napíšte program, ktorý načíta znaky zo vstupu (zadávanie znakov sa ukončí symbolom hviezdičky *), uloží ich do lineárneho zoznamu, pred každé "áčko" (a, A) vloží symbol # a upravený zoznam vypíše na obrazovku.
Napr. pre vstup: aB12Aa3a bude výstup: #aB12#A#a3#a

[Riešenie]