Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <string.h>
- #include <malloc.h>
- #include <stdio.h>
- #define MIN 1
- #define MAX 15
- #define CHARLEN 20
- struct lista
- {
- int brojIndexa;
- char *ime;
- char *prezime;
- int orderNum;
- struct lista *next;
- };
- struct lista *CreateNode (int brojIndexa, char *ime, char *prezime,int orderNum);
- int InsertAfter (struct lista *head, int brojIndexa, char *ime, char *prezime,int orderNum);
- int IspisListe (struct lista *head);
- struct lista ReadFromFile ();
- int OrderNumGenerator ();
- int InsertLast(struct lista *head, int brojIndexa, char *ime, char *prezime,int orderNum);
- int SortedInput(struct lista *head, int brojIndexa, char *ime, char *prezime,int orderNum);
- int FillSortedInput(struct lista *nonSortedList,struct lista *sortedList);
- int FreeAllocatedData(struct lista *head);
- int DeleteNode(struct lista *head);
- int main ()
- {
- struct lista head;
- struct lista test;
- test.next = NULL;
- head.next = NULL;
- head = ReadFromFile();
- FillSortedInput(&head,&test);
- IspisListe(&test);
- FreeAllocatedData(&test);
- FreeAllocatedData(&head);
- return 0;
- }
- struct lista * CreateNode (int brojIndexa, char *ime, char *prezime, int orderNum)
- {
- struct lista *returnList;
- returnList = (struct lista *) malloc (sizeof (struct lista));
- if (returnList != NULL)
- {
- returnList->brojIndexa = brojIndexa;
- returnList->ime = ime;
- returnList->prezime = prezime;
- returnList->orderNum = orderNum;
- returnList->next = NULL;
- }
- return returnList;
- }
- int InsertAfter (struct lista *head, int brojIndexa, char *ime, char *prezime,
- int orderNum)
- {
- struct lista *temp;
- if (head == NULL)
- return -1;
- temp = CreateNode (brojIndexa, ime, prezime, orderNum);
- temp->next = head->next;
- head->next = temp;
- return 0;
- }
- int IspisListe (struct lista *head)
- {
- if (head == NULL)
- return -1;
- if (head->next == NULL)
- return 1;
- head = head->next;
- while (head->next != NULL)
- {
- printf ("%d %s %s %d\n", head->brojIndexa, head->ime, head->prezime,
- head->orderNum);
- head = head->next;
- }
- printf ("%d %s %s %d\n", head->brojIndexa, head->ime, head->prezime,
- head->orderNum);
- return 0;
- }
- int OrderNumGenerator ()
- {
- int x = 0;
- x = rand () % (MAX + 1 - MIN) + MIN;
- return x;
- }
- struct lista ReadFromFile ()
- {
- char *ime;
- char *prezime;
- int brojIndexa;
- int orderNum;
- FILE *fp;
- struct lista head;
- head.next = NULL;
- ime = (char *) malloc (sizeof (char) * CHARLEN);
- prezime = (char *) malloc (sizeof (char) * CHARLEN);
- fp = fopen ("F:\\projects\\kolok\\asdf.txt", "r");
- while(!feof(fp))
- {
- fscanf(fp,"%d %s %s",&brojIndexa,ime,prezime);
- orderNum = OrderNumGenerator();
- InsertLast(&head,brojIndexa,ime,prezime,orderNum);
- ime = (char *) malloc (sizeof (char) * CHARLEN);
- prezime = (char *) malloc (sizeof (char) * CHARLEN);
- }
- fclose(fp);
- return head;
- }
- int InsertLast(struct lista *head, int brojIndexa, char *ime, char *prezime,int orderNum)
- {
- if(head == NULL)
- return -1;
- while(head->next != NULL)
- head = head->next;
- InsertAfter(head,brojIndexa,ime,prezime,orderNum);
- return 0;
- }
- int SortedInput(struct lista *head, int brojIndexa, char *ime, char *prezime,int orderNum)
- {
- struct lista *temp;
- if(head == NULL)
- return -1;
- temp = head->next;
- while(head->next != NULL && temp != NULL && strcmp(temp->prezime,prezime)<0)
- {
- head = head->next;
- temp = temp->next;
- }
- InsertAfter(head,brojIndexa,ime,prezime,orderNum);
- return 0;
- }
- int FillSortedInput(struct lista *nonSortedList,struct lista *sortedList)
- {
- if(nonSortedList == NULL || sortedList == NULL)
- return -1;
- if(nonSortedList->next == NULL)
- return 1;
- nonSortedList = nonSortedList->next;
- while(nonSortedList->next != NULL)
- {
- SortedInput(sortedList,nonSortedList->brojIndexa,nonSortedList->ime,nonSortedList->prezime,nonSortedList->orderNum);
- nonSortedList = nonSortedList->next;
- }
- SortedInput(sortedList,nonSortedList->brojIndexa,nonSortedList->ime,nonSortedList->prezime,nonSortedList->orderNum);
- return 0;
- }
- int FreeAllocatedData(struct lista *head)
- {
- struct lista *start;
- struct lista *temp;
- if(head == NULL)
- return 0;
- start = head;
- while(start->next != NULL)
- {
- temp = head;
- while (temp->next != NULL)
- {
- head = temp;
- temp = temp->next;
- }
- DeleteNode(head);
- head = start;
- }
- return 0;
- }
- int DeleteNode(struct lista *head)
- {
- struct lista *temp;
- if(head == NULL)
- return 0;
- temp = head->next;
- head->next = temp->next;
- free(temp);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement