示例#1
0
int main(int argc, char **argv)
{
  /* Argumenti komandne linije su neophodni jer se iz komandne
     linije dobija ime datoteke sa informacijama o studentima */
  if (argc != 2) {
    fprintf(stderr,
            "Greska: Program se poziva sa: ./a.out ime_datoteke\n");
    exit(EXIT_FAILURE);
  }

  /* Otvara se datoteka za citanje */
  FILE *in = NULL;
  in = fopen(argv[1], "r");
  if (in == NULL) {
    fprintf(stderr,
            "Greska: Neuspesno otvaranje datoteke %s.\n", argv[1]);
    exit(EXIT_FAILURE);
  }

  /* Deklaracije pomocnih promenljiva za citanje vrednosti koje
     treba smestiti u listu */
  char ime[MAX_IME_PREZIME], prezime[MAX_IME_PREZIME];
  char broj_indeksa[MAX_INDEKS];
  Cvor *glava = NULL;
  Cvor *trazeni = NULL;

  /* Ucitavanje vrednosti u listu */
  while (fscanf(in, "%s %s %s", broj_indeksa, ime, prezime) != EOF)
    if (dodaj_na_pocetak_liste(&glava, broj_indeksa, ime, prezime)) {
      fprintf(stderr,
              "Greska: Neuspesna alokacija memorije za nov cvor\n");
      oslobodi_listu(&glava);
      exit(EXIT_FAILURE);
    }

  /* Datoteka vise nije potrebna i zatvara se. */
  fclose(in);

  /* Ucitava se indeks po indeks studenta koji se trazi u listi. */
  while (scanf("%s", broj_indeksa) != EOF) {
    trazeni = pretrazi_listu(glava, broj_indeksa);
    if (trazeni == NULL)
      printf("ne\n");
    else
      printf("da: %s %s\n", trazeni->ime, trazeni->prezime);
  }

  /* Oslobadja se memorija zauzeta za cvorove liste. */
  oslobodi_listu(&glava);

  exit(EXIT_SUCCESS);
}
示例#2
0
main()
{
	CVOR* l = NULL;
	int i;
	for (i = 0; i<10; i++)
		ubaci_na_pocetak(&l, i);

	ispisi_listu(l);
	putchar('\n');

	oslobodi_listu(l);
}
示例#3
0
int main()
{
  /* Lista je prazna na pocetku */
  Cvor *glava = NULL;
  Cvor *trazeni = NULL;
  int broj;

  /* Testiranje funkcije za dodavanja novog broja na pocetak liste */
  printf("Unesite brojeve (CTRL+D za kraj unosa): ");
  while (scanf("%d", &broj) > 0) {
    /* Ako je funkcija vratila 1, onda je bilo greske pri alokaciji
       memorije za nov cvor. Memoriju alociranu za cvorove liste
       treba osloboditi pre napustanja programa. */
    if (dodaj_na_pocetak_liste(&glava, broj) == 1) {
      fprintf(stderr,
              "Greska: Neuspesna alokacija memorije za cvor.\n");
      oslobodi_listu(&glava);
      exit(EXIT_FAILURE);
    }
    printf("\tLista: ");
    ispisi_listu(glava);
  }

  /* Testiranje funkcije za pretragu liste */
  printf("\nUnesite broj koji se trazi: ");
  scanf("%d", &broj);

  trazeni = pretrazi_listu(glava, broj);
  if (trazeni == NULL)
    printf("Broj %d se ne nalazi u listi!\n", broj);
  else
    printf("Trazeni broj %d je u listi!\n", trazeni->vrednost);

  /* Oslobadja se memorija zauzeta listom */
  oslobodi_listu(&glava);

  exit(EXIT_SUCCESS);
}
示例#4
0
void oslobodi_listu(Cvor ** adresa_glave)
{
  /* Ako je lista vec prazna */
  if (*adresa_glave == NULL)
    return;

  /* Ako lista nije prazna, treba osloboditi memoriju. Treba
     osloboditi rep, pre oslobadjanja memorije za glavu liste. */
  oslobodi_listu(&(*adresa_glave)->sledeci);
  /* Nakon oslobodjenog repa, oslobadja se glava liste i azurira se
     glava u pozivajucoj funkciji tako da odgovara praznoj listi */
  free(*adresa_glave);
  *adresa_glave = NULL;
}
示例#5
0
/* Funkcija oslobadja memoriju zauzetu cvorovima liste */
void oslobodi_listu(Cvor ** adresa_glave)
{
  /* Ako je lista prazna, nema potrebe oslobadjati memoriju */
  if (*adresa_glave == NULL)
    return;

  /* Rekurzivnim pozivom se oslobadja rep liste */
  oslobodi_listu(&(*adresa_glave)->sledeci);

  /* Potom se oslobadja i glava liste */
  free(*adresa_glave);

  /* Lista se proglasava praznom */
  *adresa_glave = NULL;
}
示例#6
0
int main(int argc, char **argv)
{
  /* Proverava se da li je program pozvan sa ispravnim brojem
     argumenata komandne linije. */
  if (argc != 2) {
    fprintf(stderr,
            "Greska: Program se poziva sa: ./a.out datoteka.html\n");
    exit(EXIT_FAILURE);
  }

  /* Priprema datoteke za citanje */
  FILE *in = NULL;
  in = fopen(argv[1], "r");
  if (in == NULL) {
    fprintf(stderr,
            "Greska: Neuspesno otvaranje datoteke %s!\n", argv[1]);
    exit(EXIT_FAILURE);
  }

  char c;
  int i = 0;
  char procitana[MAX_DUZINA];
  Cvor *glava = NULL;
  Cvor *trazeni = NULL;

  /* Cita se datoteka, karakter po karakter, dok se ne procita
     karakter za kraj sadrzaja datoteke. */
  while ((c = fgetc(in)) != EOF) {
    /* Proverava se da li se pocinje sa citanjem nove etikete */
    if (c == '<') {
      /* Proverava se da li se cita zatvarajuca etiketa */
      if ((c = fgetc(in)) == '/') {
        i = 0;
        while ((c = fgetc(in)) != '>')
          procitana[i++] = c;
      }
      /* Cita se otvarajuca etiketa */
      else {
        i = 0;
        procitana[i++] = c;
        while ((c = fgetc(in)) != ' ' && c != '>')
          procitana[i++] = c;
      }
      procitana[i] = '\0';

      /* Trazi se procitana etiketa medju postojecim cvorovima
         liste. Ako ne postoji, dodaje se novi cvor za ucitanu
         etiketu sa brojem pojavljivanja 1. Inace se uvecava broj
         pojavljivanja etikete. */
      trazeni = pretrazi_listu(glava, procitana);
      if (trazeni == NULL) {
        if (dodaj_na_pocetak_liste(&glava, 1, procitana) == 1) {
          fprintf(stderr,
                  "Greska: Neuspesna alokacija memorije za nov cvor\n");
          oslobodi_listu(&glava);
          exit(EXIT_FAILURE);
        }
      } else
        trazeni->broj_pojavljivanja++;
    }
  }

  /* Zatvara se datoteka */
  fclose(in);

  /* Ispisuje se sadrzaj cvorova liste */
  ispisi_listu(glava);

  /* Oslobadja se memorija zauzeta listom */
  oslobodi_listu(&glava);

  exit(EXIT_SUCCESS);
}