Advertisement
Sierra_ONE

LINKED LIST (Student Record)

Apr 28th, 2024
844
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.09 KB | Source Code | 0 0
  1. //LINKED-LIST//
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #define flush fflush(stdin)
  6. typedef struct{
  7.     char fName[24],MI,lName[16];
  8. }Nametype;
  9. typedef struct{
  10.     Nametype name;
  11.     int id;
  12.     char course[8];
  13.     int yearlvl;
  14. }Stud;
  15. typedef struct node{
  16.     Stud studrec;
  17.     struct node* link;
  18. }*LIST, List;
  19.  
  20. Stud getStud();
  21. void display(List*);
  22. void add_First(List**);
  23. void add_Last(List**);
  24. void add_multipleFirst(List**);
  25. void add_multipleLast(List**);
  26. void add_Pos(List**);
  27. void sortList_ascending(List*);
  28. void sortList_descending(List*);
  29. void delete_studrec(List**);
  30. void delete_Pos(List**);
  31. void delete_same(List**);
  32. void delete_all(List**);
  33.  
  34. int main(){
  35.     List* head = NULL;
  36.     int option = 0;
  37.  
  38.     while (1){
  39.         printf("==========LINKED LIST==========\n");
  40.         printf("1. Display list.\n");
  41.         printf("2. Add a node at first.\n");
  42.         printf("3. Add a node at last.\n");
  43.         printf("4. Add multiple nodes at first.\n");
  44.         printf("5. Add multiple nodes at last.\n");
  45.         printf("6. Add a node in certain position.\n");
  46.         printf("7. Sort list ascending order and display\n");
  47.         printf("8. Sort list descending order and display\n");
  48.         printf("9. Delete a node.\n");
  49.         printf("10.Delete a node at a certain position.\n");
  50.         printf("11.Delete the same Course.\n");
  51.         printf("0. Exit.\n");
  52.         printf("Enter you choice: ");
  53.         scanf("%d",&option);
  54.  
  55.         switch(option){
  56.  
  57.             case 1:
  58.             display(head);
  59.             break;
  60.  
  61.             case 2:
  62.             add_First(&head);
  63.             break;
  64.  
  65.             case 3:
  66.             add_Last(&head);
  67.             break;
  68.  
  69.             case 4:
  70.             add_multipleFirst(&head);
  71.             break;
  72.  
  73.             case 5:
  74.             add_multipleLast(&head);
  75.             break;
  76.  
  77.             case 6:
  78.             add_Pos(&head);
  79.             break;
  80.  
  81.             case 7:
  82.             sortList_ascending(head);
  83.             break;
  84.  
  85.             case 8:
  86.             sortList_descending(head);
  87.             break;
  88.  
  89.             case 9:
  90.             delete_studrec(&head);
  91.             break;
  92.  
  93.             case 10:
  94.             delete_Pos(&head);
  95.             break;
  96.  
  97.             case 11:
  98.             delete_same(&head);
  99.             break;
  100.            
  101.             case 0:
  102.             delete_all(&head);
  103.             exit(0);
  104.             break;
  105.         }
  106.         option = 0;
  107.     }
  108.     return 0;
  109. }
  110.  
  111. Stud getStud(){
  112.     Stud info;
  113.     printf("Input LastName: ");
  114.     flush;
  115.     scanf("%[^\n]",info.name.lName);
  116.     printf("Input FirstName: ");
  117.     flush;
  118.     scanf("%[^\n]",info.name.fName);
  119.     printf("Input Middle Initial: ");
  120.     flush;
  121.     scanf("%c",&info.name.MI);
  122.     printf("Input ID: ");
  123.     flush;
  124.     scanf("%d",&info.id);
  125.     printf("Input Course: ");
  126.     flush;
  127.     scanf("%s",info.course);
  128.     printf("Input Yearlevel: ");
  129.     flush;
  130.     scanf("%d",&info.yearlvl);
  131.  
  132.     return info;
  133. }
  134.  
  135. void display(List* block){
  136.     if(block != NULL){
  137.         List* trav;
  138.         for(trav = block; trav!=NULL; trav = trav->link){
  139.             printf("ID: %d\t",trav->studrec.id);
  140.             printf("Course & Yearlevel: %s %d\t",trav->studrec.course,trav->studrec.yearlvl);
  141.             printf("Name: %s,",trav->studrec.name.lName);
  142.             printf(" %s ",trav->studrec.name.fName);
  143.             printf(".%c\n",trav->studrec.name.MI);
  144.         }
  145.         printf("\n\n");
  146.     }else{
  147.         printf("LIST IS EMPTY\n\n");
  148.     }
  149.    
  150. }
  151.  
  152. void add_First(List** block){
  153.     List* temp = (List*)malloc(sizeof(List));
  154.     temp->studrec = getStud();
  155.     temp->link = *block;
  156.     *block = temp;
  157.     printf("SUCCESSFULLY ADDED A NODE WITH VALUE AT FIRST\n\n");
  158. }
  159.  
  160. void add_Last(List** block){
  161.     List** trav;
  162.     for(trav = block; *trav != NULL; trav = &(*trav)->link){}
  163.     List* temp = (List*)malloc(sizeof(List));
  164.     temp->studrec = getStud();
  165.     temp->link = *trav;
  166.     *trav = temp;
  167.     printf("SUCCESSFULLY ADDED A NODE WITH VALUE AT LAST\n\n");
  168. }
  169.  
  170. void add_multipleFirst(List** block){
  171.     int count;
  172.     int i;
  173.     printf("Enter number of students you want to add: ");
  174.     flush;
  175.     scanf("%d",&count);
  176.  
  177.     for(i=0;i<count;i++){
  178.         printf("\nStudent Details[%d]\n",i+1);
  179.         List*temp = (List*)malloc(sizeof(List));
  180.         temp->studrec = getStud();
  181.         temp->link = *block;
  182.         *block = temp;
  183.     }
  184.     printf("SUCCESSFULLY ADDED A MULTIPLE NODEs WITH VALUE AT FIRST \n\n");
  185. }
  186.  
  187. void add_multipleLast(List** block){
  188.     int count;
  189.     int i;
  190.     printf("Enter number of students you want to add: ");
  191.     flush;
  192.     scanf("%d",&count);
  193.     List** trav;
  194.     for(i=0;i<count;i++){
  195.         printf("\nStudent Details[%d]\n",i+1);
  196.         for(trav=block; *trav!=NULL ; trav = &(*trav)->link){}
  197.         List* temp = (List*)malloc(sizeof(List));
  198.         temp->studrec = getStud();
  199.         temp->link = *trav;
  200.         *trav = temp;
  201.     }
  202.     printf("SUCCESSFULLY ADDED A MULTIPLE NODEs WITH VALUE AT LAST \n\n");
  203. }
  204.  
  205. void add_Pos(List** block){
  206.     int i,pos;
  207.     printf("Enter position: ");
  208.     flush;
  209.     scanf("%d",&pos);
  210.  
  211.     List**trav,*temp;
  212.     for(trav=block,i=0; *trav!=NULL && i!=pos; trav = &(*trav)->link,i++){}
  213.     if(i==pos){
  214.         printf("\n==Student Details==\n");
  215.         temp = (List*)malloc(sizeof(List));
  216.         temp->studrec = getStud();
  217.         temp->link = *trav;
  218.         *trav = temp;
  219.         printf("SUCCESSFULLY ADDED A NODE WITH VALUE AT NTH POSITION\n\n");
  220.     }else{
  221.         printf("POSITION OR NO.NODES EXCEEDS LIST\n\n");
  222.     }
  223. }
  224.  
  225. void sortList_ascending(List* block){
  226.     List* i,*j;
  227.     for(i=block; i!=NULL;i=i->link){
  228.         List* min = i;
  229.         for(j=i->link; j!=NULL; j = j->link){
  230.             if(strcmp(j->studrec.name.lName,min->studrec.name.lName) < 0){
  231.                 min = j;
  232.             }
  233.         }
  234.         Stud temp = i->studrec;
  235.         i->studrec = min->studrec;
  236.         min->studrec = temp;
  237.     }
  238.     display(block);
  239. }
  240.  
  241. void sortList_descending(List* block){
  242.      List* i,*j;
  243.     for(i=block; i!=NULL;i=i->link){
  244.         List* min = i;
  245.         for(j=i->link; j!=NULL; j = j->link){
  246.             if(strcmp(j->studrec.name.lName,min->studrec.name.lName) > 0){
  247.                 min = j;
  248.             }
  249.         }
  250.         Stud temp = i->studrec;
  251.         i->studrec = min->studrec;
  252.         min->studrec = temp;
  253.     }
  254.     display(block);
  255. }
  256.  
  257. void delete_studrec(List** block){
  258.     char lName[16];
  259.     printf("Enter Lastname to delete from the list: ");
  260.     flush;
  261.     scanf("%s",lName);
  262.  
  263.     List** trav;
  264.     for(trav = block;*trav!=NULL && strcmp((*trav)->studrec.name.lName,lName) != 0; trav = &(*trav)->link){}
  265.     if(*trav != NULL){
  266.         List* temp = *trav;
  267.         *trav = (*trav)->link;
  268.         free(temp);
  269.         printf("SUCCESFULLY DELETED A NODE\n\n");
  270.         display(*block);
  271.     }else{
  272.         printf("STUDENT NOT IN LIST\n\n");
  273.     }
  274. }
  275.  
  276. void delete_Pos(List** block){
  277.     int i,pos;
  278.     printf("Enter position: ");
  279.     flush;
  280.     scanf("%d",&pos);
  281.  
  282.     List**trav,*temp;
  283.     for(trav = block,i=0;*trav != NULL && i!=pos; i++,trav=&(*trav)->link){}
  284.     if(i == pos){
  285.         List* temp = *trav;
  286.         *trav = (*trav)->link;
  287.         free(temp);
  288.         printf("SUCCESFULLY DELETED A NODE AT NTH POSTION\n\n");
  289.     }else{
  290.         printf("POSITION OR NO.NODES EXCEEDS LIST\n\n");
  291.     }
  292. }
  293.  
  294. void delete_same(List** block){
  295.     char course[8];
  296.     printf("Enter course you want to delete: ");
  297.     flush;
  298.     scanf("%s",course);
  299.  
  300.     List** trav = block;
  301.     while(*trav != NULL){
  302.         if(strcmp((*trav)->studrec.course,course) == 0){
  303.             List* temp = *trav;
  304.             *trav = (*trav)->link;
  305.             free(temp);
  306.         }else{
  307.             trav = &(*trav)->link;
  308.         }
  309.     }
  310.     printf("SUCCESFULLY DELETED NODEs WITH DATA OF SAME OCCURENCES\n\n");
  311. }
  312.  
  313. void delete_all(List** block){
  314.     while(*block != NULL){
  315.         List* temp = *block;
  316.         *block = (*block)->link;
  317.         free(temp);
  318.     }
  319.     printf("SUCCESSFULLY EMPTIED THE LIST\n\n");
  320. }
Tags: CIS1201
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement