Guest User

Untitled

a guest
May 25th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.59 KB | None | 0 0
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <strings.h>
  5. #include <stdlib.h>
  6.  
  7. typedef struct Newnode{
  8.         struct Newnode *next;
  9.         int arr, page, wt, group;
  10.         }node;
  11.  
  12. int time=0;
  13. int totalWaitingTime=0;
  14. node *root, *newRoot=NULL, *queueNode=NULL;
  15. node *insert(node **q,int a, int p, int u, int w){
  16. node *temp;
  17. temp = *q;
  18. if(*q==NULL)
  19. {
  20.     *q=(node*)malloc(sizeof(node));
  21.     temp = *q;
  22. }
  23. else
  24. {
  25.     while((temp->next)!=NULL)
  26.     {
  27.         temp=temp->next;
  28.     }
  29.     temp->next = (node*)malloc(sizeof(node));
  30.     temp=temp->next;
  31. }
  32. temp->arr = a;
  33. temp->page=p;
  34. temp->group=u;
  35. temp->wt=w;
  36. temp->next=NULL;
  37. return *q;
  38. }
  39. /* merge the lists.. */
  40. node *merge(node *head_one, node *head_two) {
  41. node *head_three = (node*)malloc(sizeof(node));
  42.  
  43.  if(head_one == NULL)
  44.   return head_two;
  45.  
  46.  if(head_two == NULL)
  47.   return head_one;
  48.  
  49.  if(head_one->group < head_two->group) {
  50.   head_three = head_one;
  51.   head_three->next = merge(head_one->next, head_two);
  52.  } else {
  53.   head_three = head_two;
  54.   head_three->next = merge(head_one, head_two->next);
  55.  }
  56.  
  57.  return head_three;
  58. }
  59.  
  60. node *mergesort(node *head) {
  61.  node *head_one=(node*)malloc(sizeof(node));
  62.  node *head_two=(node*)malloc(sizeof(node));
  63.  
  64.  if((head == NULL) || (head->next == NULL))
  65.   return head;
  66.  
  67.  head_one = head;
  68.  head_two = head->next;
  69.  while((head_two != NULL) && (head_two->next != NULL)) {
  70.   head = head->next;
  71.   head_two = head->next->next;
  72.  }
  73.  head_two = head->next;
  74.  head->next = NULL;
  75.  
  76. return merge(mergesort(head_one), mergesort(head_two));
  77. }
  78.  
  79. int queue(node *n, int t){
  80.     node *temp=(node*)malloc(sizeof(node));
  81.    
  82. if(t<n->arr){
  83.              
  84. n->wt=0;
  85. t=(n->arr)+(n->page);
  86. queueNode=insert(&queueNode,n->arr, n->page, n->group, n->wt);
  87. n=n->next;
  88. while(t>=n->arr){
  89. newRoot=insert(&newRoot,n->arr, n->page, n->group, 0 );
  90. n=n->next;
  91. }
  92. newRoot=mergesort(newRoot);
  93.     while(newRoot!=NULL){
  94.                          
  95. queue(newRoot, t);
  96. temp=newRoot->next;
  97. free(newRoot);
  98. newRoot=temp;}
  99. }
  100. else{
  101.      if(n->page<50){    
  102. n->wt=t-n->arr;
  103. t+=n->page;
  104. queueNode=insert(&queueNode,n->arr, n->page, n->group, n->wt);
  105. n=n->next;
  106. while(t>=n->arr){
  107. newRoot=insert(&newRoot,n->arr, n->page, n->group, 0 );
  108. n=n->next;
  109. }
  110. newRoot=mergesort(newRoot);
  111.     while(newRoot!=NULL){
  112. queue(newRoot, t);
  113. temp=newRoot->next;
  114. free(newRoot);
  115. newRoot=temp;}
  116. }
  117. else{    
  118. queueNode=insert(&queueNode,n->arr, n->page, n->group, n->wt);
  119. n=n->next;
  120. while(t>=n->arr){
  121. newRoot=insert(&newRoot,n->arr, n->page, n->group, 0 );
  122. n=n->next;
  123. }
  124. newRoot=mergesort(newRoot);
  125.     while(newRoot!=NULL){
  126. queue(newRoot, t);
  127. newRoot=newRoot->next;
  128. }
  129. }
  130. }
  131. }
  132.  
  133.  
  134.  
  135. int printwt(node *n){
  136.     if(n==NULL){
  137.     printf("");}
  138.     else
  139.     while(n==NULL){
  140.    
  141. totalWaitingTime+=n->wt;
  142. n=n->next;
  143. printwt(n);
  144. }
  145. return totalWaitingTime;
  146. printwt(n);
  147. }
  148. int printw(node *n){if(n==NULL){
  149.     printf("");}
  150.     else
  151.     while(n==NULL){
  152.    
  153. totalWaitingTime+=n->wt;
  154. printf("Arr=%d Page=%d Group=%d WaitingTime=%d Total Waiting=%d ", n->arr, n->page, n->group, n->wt, totalWaitingTime);
  155. n=n->next;
  156. printwt(n);
  157. }
  158. printwt(n);
  159. }
  160.  
  161. int main(){
  162. int arrival, pagenumber;
  163. int null =0;
  164. root=NULL;
  165. char user[20]="";
  166. char student[20]="student";
  167. char assistant[20]="assistant";
  168. char secretary[20]="secretary";
  169. char instructor[20]="instructor";
  170. FILE *input;
  171. int usergroup=0;
  172. input=fopen("input.txt","r");
  173.  
  174.     if(input==NULL){
  175.     printf("The input file couldn't open");
  176.     }
  177.     else{
  178.          while(!feof(input)){
  179.          fscanf(input,"%d %d %s", &arrival, &pagenumber, &user, null );
  180.          
  181.          if(pagenumber<50){  
  182.                                    
  183.          if(strcmp(user,student) == 0)
  184.          usergroup=pagenumber;
  185.          
  186.          else if(strcmp(user,instructor) == 0)
  187.          usergroup=100+pagenumber;
  188.          
  189.          else if(strcmp(user,assistant) == 0)
  190.          usergroup=200+pagenumber;
  191.          
  192.          else if(strcmp(user,secretary) == 0)
  193.          usergroup=300+pagenumber;
  194.          }
  195.          else{
  196.              
  197.          if(strcmp(user,student) == 0)
  198.          usergroup=400+pagenumber;
  199.          
  200.          else if(strcmp(user,instructor) == 0)
  201.          usergroup=500+pagenumber;
  202.          
  203.          else if(strcmp(user,assistant) == 0)
  204.          usergroup=600+pagenumber;
  205.          
  206.          else if(strcmp(user,secretary) == 0)
  207.          usergroup=700+pagenumber;
  208.          }
  209.          
  210.          root=insert(&root, arrival, pagenumber, usergroup, null );
  211.     }
  212. }
  213.  
  214. fclose(input);
  215. queue(root, time);
  216. int d=printwt(queueNode);
  217. printf("Total Waiting Time = %d",d);
  218. system("pause");    
  219. }
Add Comment
Please, Sign In to add comment