Advertisement
Guest User

Untitled

a guest
Dec 15th, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.12 KB | None | 0 0
  1. #ifndef __PROGTEST__
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <assert.h>
  6.  
  7. #define LIST_BY_YEAR 0
  8. #define LIST_BY_TYPE 1
  9.  
  10. #define TYPE_MAX 100
  11. #define SETUP_MAX 100
  12.  
  13. typedef struct TEngine
  14. {
  15. struct TEngine * m_Next;
  16. struct TEngine * m_Prev;
  17. int m_Year;
  18. char m_Type [ TYPE_MAX ];
  19. int m_Setup [ SETUP_MAX ];
  20. } TENGINE;
  21.  
  22. typedef struct TArchive
  23. {
  24. struct TArchive * m_Next;
  25. struct TArchive * m_Prev;
  26. TENGINE * m_Engines;
  27. } TARCHIVE;
  28.  
  29. TENGINE * createEngine ( const char * type,
  30. int year )
  31. {
  32. TENGINE * res = (TENGINE *) malloc ( sizeof (*res ) );
  33. res -> m_Next = NULL;
  34. res -> m_Prev = NULL;
  35. res -> m_Year = year;
  36. strncpy ( res -> m_Type, type, sizeof ( res -> m_Type ) );
  37. for ( int i = 0; i < SETUP_MAX; i ++ )
  38. res -> m_Setup[i] = 0;
  39. return res;
  40. }
  41. #endif /* __PROGTEST__ */
  42.  
  43. TARCHIVE * AddEngine ( TARCHIVE * list,
  44. int listBy,
  45. TENGINE * engine )
  46. {
  47. TARCHIVE *current = NULL;
  48. switch (listBy)
  49. {
  50. case (LIST_BY_TYPE) :
  51. {
  52. current = list;
  53. while(1)
  54. {
  55. if(!current)
  56. {
  57. TARCHIVE *p = (TARCHIVE*)malloc(sizeof(*p));
  58. p->m_Prev = NULL;
  59. p->m_Next = NULL;
  60. p->m_Next = list;
  61. if(list) list->m_Prev = p;
  62. list = p;
  63. p->m_Engines = engine;
  64. break;
  65. }
  66. if(strcmp(current-> m_Engines -> m_Type,engine ->m_Type) == 0)
  67. {
  68. engine->m_Next = current ->m_Engines;
  69. current->m_Engines->m_Prev = engine;
  70. current->m_Engines=engine;
  71. break;
  72. }
  73. current = current->m_Next;
  74. }
  75. current = list;
  76. while(current) {
  77. TENGINE *currentE = current->m_Engines;
  78. while (currentE->m_Next)
  79. {
  80. if(currentE->m_Year > currentE->m_Next->m_Year)
  81. {
  82. int i = currentE->m_Year;
  83. currentE->m_Year=currentE->m_Next->m_Year;
  84. currentE->m_Next->m_Year=i;
  85. currentE = current->m_Engines;
  86. continue;
  87. }
  88. currentE = currentE ->m_Next;
  89. }
  90. current = current->m_Next;
  91. }
  92. current = list;
  93. while(current->m_Next)
  94. {
  95. if(strcmp(current->m_Engines->m_Type, current->m_Next->m_Engines->m_Type)>0)
  96. {
  97. TENGINE *r=current->m_Engines;
  98. current->m_Engines=current->m_Next->m_Engines;
  99. current->m_Next->m_Engines = r;
  100. }
  101. current = current->m_Next;
  102. }
  103. return list;
  104. }
  105. case (LIST_BY_YEAR) :
  106. {
  107. current = list;
  108. while(1)
  109. {
  110. if(!current)
  111. {
  112. TARCHIVE *p = (TARCHIVE*)malloc(sizeof(*p));
  113. p->m_Prev = NULL;
  114. p->m_Next = NULL;
  115. p->m_Next = list;
  116. if(list) list->m_Prev = p;
  117. list = p;
  118. p->m_Engines = engine;
  119. break;
  120. }
  121. if(current->m_Engines -> m_Year==engine ->m_Year)
  122. {
  123. engine->m_Next = current ->m_Engines;
  124. current->m_Engines->m_Prev = engine;
  125. current->m_Engines=engine;
  126. break;
  127. }
  128. current = current->m_Next;
  129. }
  130.  
  131. current = list;
  132. while(current) {
  133. TENGINE *currentE = current->m_Engines;
  134. while (currentE->m_Next)
  135. {
  136. if(strcmp(currentE->m_Next->m_Type, currentE->m_Type) < 0)
  137. {
  138. char tmp[100];
  139. strcpy(tmp, currentE->m_Type);
  140. strcpy(currentE->m_Type, currentE->m_Next->m_Type);
  141. strcpy(currentE->m_Next->m_Type, tmp);
  142. currentE = current->m_Engines;
  143. continue;
  144. }
  145. currentE = currentE ->m_Next;
  146. }
  147. current = current->m_Next;
  148. }
  149.  
  150. current = list;
  151. while(current->m_Next)
  152. {
  153. if(current->m_Engines->m_Year > current->m_Next->m_Engines->m_Year)
  154. {
  155. TENGINE *r=current->m_Engines;
  156. current->m_Engines=current->m_Next->m_Engines;
  157. current->m_Next->m_Engines = r;
  158. }
  159. current = current->m_Next;
  160. }
  161. return list;
  162.  
  163. }
  164.  
  165. }
  166. }
  167. void DelArchive ( TARCHIVE * list )
  168. {
  169. while(list)
  170. {
  171. TARCHIVE *a=list->m_Next;
  172. while(list->m_Engines)
  173. {
  174. TENGINE *e = list->m_Engines->m_Next;
  175. free(list->m_Engines);
  176. list->m_Engines = e;
  177. }
  178. free(list);
  179. list = a;
  180. }
  181.  
  182. }
  183. TARCHIVE * ReorderArchive ( TARCHIVE * list,
  184. int listBy )
  185. {
  186. TARCHIVE *current = list;
  187. TARCHIVE *r = NULL;
  188. TARCHIVE *na = NULL;
  189. while(current)
  190. {
  191. TENGINE *e = current->m_Engines;
  192. while(e)
  193. {
  194. TENGINE *n = e->m_Next;
  195. e->m_Next = NULL;
  196. e->m_Prev = NULL;
  197. r = AddEngine(r, listBy, e);
  198. e = n;
  199. }
  200. na = current->m_Next;
  201. free(current);
  202. current = na;
  203. }
  204. return r;
  205. }
  206. #ifndef __PROGTEST__
  207. int main ( int argc,
  208. char * argv [] )
  209. {
  210. return 0;
  211. }
  212. #endif /* __PROGTEST__ */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement