Untitled

 avatar
unknown
plain_text
a month ago
5.2 kB
5
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct student {
    	char *ime;
        	char *prezime;
            	int id;
                	float prosjek;
                    	struct student* nextNode;
} STUDENT;

void inputNodeData(STUDENT* headNode) {
        char imebuffer[30], prezimebuffer[30];
            
                printf("ID: ");
                    scanf("%d", &headNode->id);
                        printf("Ime: ");
                            scanf("%s", imebuffer);
                                headNode->ime = (char*)calloc(strlen(imebuffer) + 1, sizeof(char));
                                    strcpy(headNode->ime, imebuffer);
                                        printf("Prezime: ");
                                            scanf("%s", prezimebuffer);
                                                headNode->prezime = (char*)calloc(strlen(prezimebuffer) + 1, sizeof(char));
                                                    strcpy(headNode->prezime, prezimebuffer);
                                                        printf("Prosjek: ");
                                                            scanf("%f", &headNode->prosjek);
}

float prosjekSvih(STUDENT *headNode) {
        int br = 0;
            float suma = 0;
                while(headNode != NULL) {
                            br++;
                                    suma += headNode->prosjek;
                                            headNode = headNode->nextNode;
                }
                    return suma / br;
}

STUDENT* createSLList(void) {
        STUDENT *headNode = (STUDENT*)calloc(1, sizeof(STUDENT));
            if (headNode == NULL) {
                        perror("Kreiranje");
                                return NULL;
            }
                else {
                            inputNodeData(headNode);
                                    headNode->nextNode = NULL;
                }
                    return headNode;
}

STUDENT* insertNewNodeSLList(STUDENT* headNode) {
        STUDENT *newHeadNode = (STUDENT*)calloc(1, sizeof(STUDENT));
            if (newHeadNode == NULL) {
                        perror("Kreiranje");
                                return headNode;
            }
                else {
                            inputNodeData(newHeadNode);
                                    newHeadNode->nextNode = headNode;
                }
                    return newHeadNode;
}

void traverseSLList(STUDENT* traverseNode) {
        if (traverseNode == NULL) {
                    return;
        }
            else {
                        while (traverseNode != NULL) {
                                        printf("ID: %d - %s %s, prosjek: %.2f\n", traverseNode->id, traverseNode->ime, traverseNode->prezime, traverseNode->prosjek);
                                                    traverseNode = traverseNode->nextNode;
                        }
            }
}

STUDENT* searchSLList(STUDENT* traverseNode, int criteria) {
        while (traverseNode) {
                    if (traverseNode->id == criteria) {
                                    return traverseNode;
                    }
                            traverseNode = traverseNode->nextNode;
        }
            return NULL;
}

void deleteNodeSLList(STUDENT** headNode, STUDENT* targetNode) {
        if (targetNode == NULL) {
                    return;
        }
            if (*headNode == targetNode) {
                        *headNode = (*headNode)->nextNode;
                                free(targetNode);  
            }
                else {
                            STUDENT* traverseNode = *headNode;
                                    while (traverseNode->nextNode != NULL) {
                                                    if (traverseNode->nextNode == targetNode) {
                                                                        traverseNode->nextNode = targetNode->nextNode;
                                                                                        free(targetNode->ime);
                                                                                                        free(targetNode->prezime);
                                                                                                                        free(targetNode);
                                                                                                                                        break;
                                                    }
                                                                traverseNode = traverseNode->nextNode;
                                    }
                }
}

STUDENT* deleteWholeSLList(STUDENT* traverseNode) {
        STUDENT* deleteNode = NULL;
            while (traverseNode) {
                        deleteNode = traverseNode;
                                traverseNode = traverseNode->nextNode;
                                        free(deleteNode->ime);
                                                free(deleteNode->prezime);
                                                        free(deleteNode);
            }
                return NULL;
}
Editor is loading...
Leave a Comment