Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Zadata je tekstualna datoteka spisak.txt koja sadrži
- spisak imena i prezimena. U svakom redu datoteke nalazi
- se tačno jedno ime i prezime međusobno razdvojeni
- prazninama. Datoteka je sortirana po abecednom
- kriterijumu.
- U datoteci brisi.txt nalazi se u istom formatu kao u
- datoteci spisak.txt spisak imena i prezimena koje treba
- izbaciti iz datoteke spisak.txt, i formirati datoteku
- izlaz.txt
- VAZNO:
- Nizove sa imenima sam realizovao kao jednostruko spregnute liste,
- a imena su smjestena u staticke nizove.
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define MAX_NAME_SIZE 100
- typedef struct Cvor Tcvor;
- struct Cvor {
- Tcvor *sljedeci;
- char imePrezime[MAX_NAME_SIZE];
- };
- void initijalizacija(Tcvor **glava) {
- *glava = NULL;
- }
- void dodajIme(Tcvor **glava, char imePrezime[MAX_NAME_SIZE]) {
- Tcvor *novi;
- novi = (Tcvor *)malloc(sizeof(Tcvor));
- strcpy(novi->imePrezime, imePrezime);
- novi->sljedeci = NULL;
- if (*glava == NULL) {
- *glava = novi;
- return;
- }
- Tcvor *tekuci;
- tekuci = *glava;
- while (tekuci->sljedeci != NULL)
- tekuci = tekuci->sljedeci;
- tekuci->sljedeci = novi;
- }
- void obrisiImePrezime(Tcvor **glava, char imePrezime[MAX_NAME_SIZE]) {
- Tcvor *tekuci;
- Tcvor *prethodni;
- prethodni = tekuci = *glava;
- while (tekuci != NULL) {
- if (strcmp(tekuci->imePrezime, imePrezime) == 0) {
- if (prethodni != tekuci)
- prethodni->sljedeci = tekuci->sljedeci;
- else *glava = tekuci->sljedeci;
- free(tekuci);
- tekuci = prethodni->sljedeci;
- return;
- }
- prethodni = tekuci;
- tekuci = tekuci->sljedeci;
- }
- }
- void obrisiListu(Tcvor **glava) {
- Tcvor *tekuci;
- while (*glava != NULL) {
- tekuci = *glava;
- *glava = (*glava)->sljedeci;
- free(tekuci);
- }
- }
- int main() {
- FILE *foSpisak, *foIzlaz, *foBrisi;
- Tcvor *glavaSpisak, *glavaBrisi;
- char imePrezime[MAX_NAME_SIZE];
- initijalizacija(&glavaSpisak);
- initijalizacija(&glavaBrisi);
- //ucitava spisak imena
- foSpisak = fopen("spisak.txt", "r");
- while (1) {
- if (fgets(imePrezime, MAX_NAME_SIZE, foSpisak) != NULL)
- dodajIme(&glavaSpisak, imePrezime);
- else break;
- }
- fclose(foSpisak);
- //ucitava spisak imena za brisanje
- foBrisi = fopen("brisi.txt", "r");
- while (1) {
- if (fgets(imePrezime, MAX_NAME_SIZE, foBrisi) != NULL)
- dodajIme(&glavaBrisi, imePrezime);
- else break;
- }
- fclose(foBrisi);
- //brise elemente iz liste
- Tcvor *tekuci;
- tekuci = glavaBrisi;
- while (tekuci != NULL) {
- strcpy(imePrezime, tekuci->imePrezime);
- obrisiImePrezime(&glavaSpisak, imePrezime);
- tekuci = tekuci->sljedeci;
- }
- //upisuje listu u fajl
- foIzlaz = fopen("izlaz.txt", "w");
- tekuci = glavaSpisak;
- while (tekuci != NULL) {
- fputs(tekuci->imePrezime, foIzlaz);
- tekuci = tekuci->sljedeci;
- }
- fclose(foIzlaz);
- obrisiListu(&glavaSpisak);
- obrisiListu(&glavaBrisi);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement