Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.03 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include<stdlib.h>
  4. #include <string.h>
  5. typedef struct Team {
  6. char Name[100];
  7. char City[100];
  8. int Wins;
  9. int Loses;
  10. int Draws;
  11. int Points;
  12. struct Team*Left;
  13. struct Team*Right;
  14. struct Team*Parent;
  15. }Team;
  16. void InitTeam(Team*T)
  17. {
  18. T->Left=NULL;
  19. T->Right=NULL;
  20. T->Parent=NULL;
  21.  
  22. }
  23. typedef struct TeamTree
  24. {
  25. Team* Root;
  26. }TeamTree;
  27. void InitTree(TeamTree*R)
  28. {
  29. R->Root=NULL;
  30. }
  31. void print(Team*T)
  32. {
  33. if(T!=NULL)
  34. printf("\nName: %s\nCity: %s\nWins: %d\nLoses: %d\nDraws: %d\nPoints: %d",T->Name,T->City,T->Wins,T->Loses,T->Draws,T->Points);
  35. }
  36.  
  37. void Add(TeamTree*R,Team*N,Team*Current=NULL) {
  38. if(R->Root==NULL)
  39. {
  40. R->Root=N;
  41. return;
  42. }
  43. if(Current==NULL) Current=R->Root;
  44. int c=strcmp(Current->Name,N->Name);
  45. if (c==0)
  46. Current=N;
  47. if(c==-1)
  48. {
  49. if(Current->Right!=NULL)
  50. Add(R,N,Current->Right);
  51. else
  52. Current->Right=N;
  53. }
  54. if(c==1)
  55. {
  56. if(Current->Left!=NULL)
  57. Add(R,N,Current->Left);
  58. else
  59. Current->Left=N;
  60. }
  61. }
  62. Team* Find(TeamTree*R,char TeamName[],Team*Current=NULL)
  63. {
  64. if(R==NULL) return NULL;
  65. if(R->Root==NULL)
  66. return NULL;
  67. if(Current==NULL) Current=R->Root;
  68. int c=strcmp(Current->Name,TeamName);
  69. if (c==0)
  70. return Current;
  71. if(c==1)
  72. {
  73. if(Current->Left!=NULL)
  74. return Find(R,TeamName,Current->Left);
  75. else
  76. return NULL;
  77. }
  78. if(c==-1)
  79. {
  80. if(Current->Right!=NULL)
  81. return Find(R,TeamName,Current->Right);
  82. else
  83. return NULL;
  84. }
  85. }
  86.  
  87. void Load(TeamTree*R, char FileName[])
  88. {
  89. if(R==NULL) return;
  90. FILE* fp;
  91. fp = fopen(FileName, "r");
  92. if(fp==NULL)
  93. {
  94. printf("\nCouldn't open the file: %s", FileName);
  95. return;
  96. }
  97. char name[100]; char city[100];int wins;int loses;int draws;int points;
  98. while(1)
  99. {
  100. fscanf(fp, "%s%s%d%d%d%d", name, city,wins,loses,draws,points);
  101. if(strcmp(name, "NULL")!=0 && strcmp(city, "NULL")!=0)
  102. {
  103. Team* N = (Team*)malloc(sizeof(Team));
  104. InitTeam(N);
  105. strcpy(N->Name,name); strcpy(N->City,city);N->Wins=wins;N->Loses=loses;N->Draws=draws;N->Points=points;
  106. Add(R, N);
  107. }
  108. else
  109. break;
  110. }
  111. fclose(fp);
  112. }
  113. void SaveTeam(Team*Node, FILE* fp)
  114. {
  115. if(fp==NULL)
  116. return;
  117. if(Node!=NULL)
  118. {
  119. fprintf(fp, "%s%s%d%d%d%d", Node->Name, Node->City,Node->Wins,Node->Loses,Node->Draws,Node->Points);
  120. if(Node->Left!=NULL)
  121. SaveTeam(Node->Left, fp);
  122. if(Node->Right!=NULL)
  123. SaveTeam(Node->Right, fp);
  124. }
  125. }
  126. void Save(TeamTree*R, char FileName[])
  127. {
  128. if(R==NULL) return;
  129. FILE *ptr;
  130. ptr = fopen(FileName, "w");
  131. if(ptr==NULL)
  132. {
  133. printf("\nCouldn't open the file: %s", FileName);
  134. return;
  135. }
  136. SaveTeam(R->Root,ptr);
  137. fputs("NULL\n", ptr);
  138. fputs("NULL", ptr);
  139. fputs("NULL",ptr);
  140. fputs("NULL",ptr);
  141. fputs("NULL",ptr);
  142. fputs("NULL",ptr);
  143. fclose(ptr);
  144. }
  145.  
  146. void InOrder(Team*Node,void(*f)(Team*))
  147. {
  148. if(Node->Left!=NULL)
  149. InOrder(Node->Left,f);
  150. if(Node!=NULL)
  151. f(Node);
  152. if(Node->Right!=NULL)
  153. InOrder(Node->Right,f);
  154. }
  155. int main() {
  156. TeamTree Tree;
  157. InitTree(&Tree);
  158. TeamTree*ptr=&Tree;
  159. Team*Eagles=(Team*)malloc(sizeof(Team));InitTeam(Eagles);
  160. strcpy(Eagles->Name,"Eagles");strcpy(Eagles->City,"Manchester");Eagles->Wins=2;Eagles->Loses=2;Eagles->Draws=1;Eagles->Points=28;
  161. Team*Lions=(Team*)malloc(sizeof(Team));InitTeam(Lions);
  162. strcpy(Lions->Name,"Lions");strcpy(Lions->City,"Paris");Lions->Wins=5;Lions->Loses=1;Lions->Draws=0;Lions->Points=34;
  163. Team*Crocodiles=(Team*)malloc(sizeof(Team));InitTeam(Crocodiles);
  164. strcpy(Crocodiles->Name,"Crocodiles");strcpy(Crocodiles->City,"Ottawa");Crocodiles->Wins=4;Crocodiles->Loses=4;Crocodiles->Draws=2;Crocodiles->Points=21;
  165. Team*Elephants=(Team*)malloc(sizeof(Team));InitTeam(Elephants);
  166. strcpy(Elephants->Name,"Elephants");strcpy(Elephants->City,"Munchen");Elephants->Wins=3;Elephants->Loses=2;Elephants->Draws=3;Elephants->Points=24;
  167. Add(ptr,Eagles);
  168. Add(ptr,Lions);
  169. Add(ptr,Crocodiles);
  170. Add(ptr,Elephants);
  171. Team*T=Find(ptr,"Lions");
  172. if(T!=NULL)
  173. print(T);
  174. printf("\n");
  175. printf("\nInOrder: ");
  176. void(*f_ptr)(Team*); f_ptr=print;
  177. InOrder(Tree.Root,f_ptr);
  178. system("pause");
  179. return 0;
  180. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement