abC primeri - kazalci/linsez3.c

linsez3.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <stdio.h>
#include <stdlib.h>

// element seznama
struct element {
  int vrednost;                
  struct element *naslednji;   
};

// zacetek seznama
struct element *zacetek;

// dodajanje elementa na "pravo mesto"
void dodajU(int x) {
  // kazalec na nov element 
  struct element *nov;

  // pomozni kazalec za sprehod
  struct element *tmp;

  // rezerviram prostor v pomnilniku in zapisem vrednost
  nov=(struct element *) malloc (sizeof(struct element));  
  nov -> vrednost = x;

  if ((zacetek==NULL) || (zacetek->vrednost > x)) {
    // vstavimo na zacetek seznama
    nov->naslednji = zacetek;
    zacetek = nov; 
  } else {
	// najprej poiscemo pravo mesto ...
    tmp = zacetek;
    while ((tmp->naslednji != NULL) && 
		   (tmp->naslednji->vrednost < x))
	  tmp = tmp -> naslednji;

    // ... nato nov element vrinemo v verigo
	nov -> naslednji = tmp -> naslednji;
    tmp -> naslednji = nov;
  }
}

// izpisemo element seznama
void izpisi() {
  struct element *tmp;

  tmp = zacetek;
  // sprehodimo se po vsem seznamu
  while (tmp != NULL) {  
    printf("%d  ", tmp->vrednost); 
    tmp = tmp->naslednji;
  }
  printf("\n");
}


main() {
  // na zacetku ustvarim prazen seznam
  zacetek = NULL;  

  // dodam elemente ...
  dodajU(2);dodajU(7);dodajU(3);
  dodajU(1);dodajU(15);dodajU(5);

  // ... in seznam izpisem
  izpisi();
}

    Nazaj...