Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- typedef struct gorivo_st{
- char oznaka[3];
- char tip[11];
- double cena;
- struct gorivo_st *next;
- }node;
- void insert(node ** root, char oznaka[],char tip[], double cena){
- node* newNode = (node*)malloc(sizeof(node));
- strcpy(newNode->oznaka,oznaka);
- strcpy(newNode->tip, tip);
- newNode->cena = cena;
- newNode->next = NULL;
- if(*root == NULL){
- *root = newNode;
- }else{
- newNode->next = *root;
- *root = newNode;
- }
- }
- void insertNaKraj(node ** root, char oznaka[],char tip[], double cena){
- node* newNode = (node*)malloc(sizeof(node));
- strcpy(newNode->oznaka,oznaka);
- strcpy(newNode->tip, tip);
- newNode->cena = cena;
- newNode->next = NULL;
- node * current = *root;
- if(*root == NULL){
- *root = newNode;
- return;
- }
- while(current->next == NULL){
- current = current->next;
- }
- current->next= newNode;
- }
- void printList(node * root){
- node* current = root;
- while(current != NULL){
- printf("%lf %s %s\n",current->cena,current->oznaka,current->tip);
- current = current->next;
- }
- }
- void ucitajIzFajla(char imeFajla[], node ** root){
- FILE *f = fopen(imeFajla,"r");
- if(f==NULL){
- printf("Greska prilikom otvaranja ulaznog fajla");
- exit(1);
- }
- char oznaka[3];
- char tip[11];
- double cena;
- while(fscanf(f,"%s %s %lf\n",oznaka,tip,&cena) != EOF){
- insert(root,oznaka,tip,cena);
- }
- fclose(f);
- }
- void obrisiListu(node** root){
- node* temp = *root;
- while(*root!=NULL){
- temp = *root;
- *root = (*root)->next;
- //printf("Brisem: %lf %s %s\n",temp->cena,temp->oznaka,temp->tip);
- free(temp);
- }
- *root=NULL;
- }
- node* nadjiNajeftinije(node* root){
- node* min = root;
- node* current = root;
- while(current != NULL){
- if(min->cena > current->cena)
- min=current;
- current = current->next;
- }
- return min;
- }
- node* getAt(node * root, int pos){ //pronalazi cvor na odredjenoj poziciji
- int i = 0;
- node * current = root;
- while(i != pos && current != NULL){
- current = current->next;
- i++;
- }
- return current;
- }
- void deleteNode(node ** root, node* zaBrisanje){
- if(*root ==NULL){ //ukoliko je lista prazna
- return;
- }
- if(*root == zaBrisanje){ //ukoliko je cvor za brisanje prvi cvor u listi
- *root = zaBrisanje->next;
- free(zaBrisanje);
- }
- //iteratori
- node* current = *root;
- node* previous;
- //iteriramo kroz listu dok ne dodjemo do kraja ili dok ne nadjemo cvor za brisanje
- while(current != NULL && current != zaBrisanje){
- previous = current;
- current = current->next;
- }
- if(current != NULL){ // ukoliko smo nasli radimo prevezivanje
- previous->next = current->next;
- free(current);
- }
- }
- float average(node * root){
- node * current = root;
- float sum=0;
- int count=0;
- while(current != NULL){
- sum = sum + current->cena;
- count = count + 1;
- current = current->next;
- }
- return sum/count;
- }
- float averageZaTip(node * root,char tip[]){
- node * current = root;
- float sum=0;
- int count=0;
- while(current != NULL){
- if(strcmp(current->tip,tip)==0){
- sum = sum + current->cena;
- count = count + 1;
- }
- //ovo obavezno izvan if-a
- current = current->next;
- }
- if(count == 0){
- return -1;
- }
- return sum/count;
- }
- void ispisiVeceOdProsecene(node * root,float prosecna){
- node * current = root;
- while(current != NULL){
- if(current->cena > prosecna){
- printf("%s %f\n",current->tip,current->cena);
- }
- current = current->next;
- }
- }
- void ispisiVeceOdProsecenePoTipu(node * root,float prosecna,char tip[]){
- node * current = root;
- while(current != NULL){
- if(current->cena > prosecna && strcmp(current->tip,tip)==0){
- printf("%s %f\n",current->tip,current->cena);
- }
- current = current->next;
- }
- }
- void main(){
- node * root = NULL;
- ucitajIzFajla("cene.txt",&root);
- printList(root);
- node* najeftiniji = getAt(root,4);
- printf("gorivo %lf %s %s\n",
- najeftiniji->cena,najeftiniji->oznaka,najeftiniji->tip);
- float prosecna = average(root);
- float prosecnaGas = averageZaTip(root,"kerozin");
- printf("Vece od prosecne\n***********************\n");
- ispisiVeceOdProsecene(root,prosecna);
- printf("Vece od prosecne\n***********************\n");
- if(prosecnaGas == -1){
- printf("NOT FOUND(nema tog goriva");
- }else{
- printf("\nprosecna cena gorivaa je %f\n",prosecnaGas);
- }
- //deleteNode(&root,najeftiniji);
- printf("Nakon brisanja :\n");
- printList(root);
- obrisiListu(&root);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement