Advertisement
Guest User

Untitled

a guest
Jan 24th, 2017
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.55 KB | None | 0 0
  1. /*1) создает пустой список;
  2. 2) добавляет элементы в список;
  3. 3) удаляет элементы из списка;
  4. 4) выполняет функции по вариантам.
  5. 5) выводит список на экран.
  6. 6) выход
  7. Список «Авиарейсы» : номер рейса, пункт назначения, время вылета.*/
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include <locale>
  13.  
  14. typedef struct avia
  15. {
  16. char destination[255];
  17. int nomer;
  18. char time[255];
  19. struct avia *next;
  20. }avia;
  21.  
  22. bool acces = false;
  23. int count1;
  24.  
  25. avia* getLastButOne(avia *head)
  26. {
  27. if (head->next == NULL)
  28. return NULL;
  29. while (head->next->next)
  30. head = head->next;
  31. return head;
  32. }
  33.  
  34. avia* getNth(avia *head, int Nth)
  35. {
  36. while (int i = 0 < Nth - 2 && head)
  37. {
  38. head = head->next;
  39. i++;
  40. }
  41. return head;
  42. }
  43.  
  44. avia* getLast(avia *head)
  45. {
  46. while (head->next)
  47. head = head->next;
  48. return head;
  49. }
  50.  
  51. int CreateList()
  52. {
  53. int n;
  54. printf("Введите кол-во элементов списка: ");
  55. scanf_s("%d", &n);
  56. printf("Список успешно создан!\n");
  57. acces = true;
  58. return n;
  59. }
  60.  
  61. void push(avia **head, char *destination, int nomer, char *time)
  62. {
  63. avia *tmp = (avia*)malloc(sizeof(avia));
  64. if (*head == NULL)
  65. {
  66. for (int i = 0; i < 255; i++)
  67. tmp->destination[i] = destination[i];
  68. tmp->nomer = nomer;
  69. for (int i = 0; i < 255; i++)
  70. tmp->time[i] = time[i];
  71. tmp->next = NULL;
  72. *head = tmp;
  73. }
  74. else
  75. {
  76. for (int i = 0; i < 255; i++)
  77. tmp->destination[i] = destination[i];
  78. tmp->nomer = nomer;
  79. for (int i = 0; i < 255; i++)
  80. tmp->time[i] = time[i];
  81. tmp->next = *head;
  82. *head = tmp;
  83. }
  84. }
  85. void pushback(avia *head, char *destination, int nomer, char *time)
  86. {
  87. avia *last = getLast(head);
  88. avia *tmp = (avia*)malloc(sizeof(avia));
  89. for (int i = 0; i < 255; i++)
  90. tmp->destination[i] = destination[i];
  91. tmp->nomer = nomer;
  92. for (int i = 0; i < 255; i++)
  93. tmp->time[i] = time[i];
  94. tmp->next = NULL;
  95. last->next = tmp;
  96. }
  97.  
  98. void insert(avia *head, char *destination, int nomer, char *time, int position)
  99. {
  100. avia *tmp = NULL;
  101. int i = 2;
  102. while (i < position && head->next)
  103. {
  104. head = head->next;
  105. i++;
  106. }
  107. tmp = (avia*)malloc(sizeof(avia));
  108. for (int i = 0; i < 255; i++)
  109. tmp->destination[i] = destination[i];
  110. tmp->nomer = nomer;
  111. for (int i = 0; i < 255; i++)
  112. tmp->time[i] = time[i];
  113. if (head->next)
  114. tmp->next = head->next;
  115. else
  116. tmp->next = NULL;
  117. head->next = tmp;
  118. }
  119.  
  120. void pop(avia **head)
  121. {
  122. avia *prev = NULL;
  123. if (head == NULL)
  124. printf("Список пуст, удалять нечего!\n");
  125. else
  126. {
  127. prev = (*head);
  128. (*head) = (*head)->next;
  129. free(prev);
  130. printf("Элемент успешно удалён!\n");
  131. }
  132. }
  133.  
  134. void popback(avia **head)
  135. {
  136. avia *lastbn = getLastButOne(*head);
  137. if (lastbn == NULL)
  138. {
  139. free(*head);
  140. *head = NULL;
  141. }
  142. else
  143. {
  144. free(lastbn->next);
  145. lastbn->next = NULL;
  146. }
  147. }
  148. void deleteNth(avia **head, int Nth)
  149. {
  150. avia* prev = getNth(*head, Nth);
  151. avia* elem = prev->next;
  152. prev->next = elem->next;
  153. free(elem);
  154. }
  155.  
  156.  
  157.  
  158. void display(avia **head)
  159. {
  160. avia *tmp = *head;
  161.  
  162. while (tmp != NULL)
  163. {
  164. printf("%s %d %s\n", tmp->destination, tmp->nomer, tmp->time);
  165. tmp = tmp->next;
  166. }
  167. }
  168.  
  169. void findMax(avia **head)
  170. {
  171. int i;
  172. avia *tmp = (*head), *max = (*head);
  173. for (i = 0; i < count1 - 1; i++)
  174. {
  175. tmp = tmp->next;
  176. if (max->nomer < tmp->nomer)
  177. max = tmp;
  178. }
  179. printf("Номер максимального элемента (по номеру рейса): %d\n", i + 1);
  180. printf("Его данные: (пункт назначения) %s (номер рейса) %d (время) %s\n", max->destination, max->nomer, max->time);
  181. }
  182.  
  183. void findMin(avia **head)
  184. {
  185. int i;
  186. avia *tmp = (*head), *min = (*head);
  187. for (i = 0; i < count1 - 1; i++)
  188. {
  189. tmp = tmp->next;
  190. if (min->nomer > tmp->nomer)
  191. min = tmp;
  192. }
  193. printf("Номер минимального элемента (по номеру рейса): %d\n", i + 1);
  194. printf("Его данные:(пункт назначения) %s (номер рейса) %d (время) %s\n", min->destination, min->nomer, min->time);
  195. }
  196.  
  197. void MoreFnc(avia **head)
  198. {
  199. int newchoice;
  200. printf("1)Поиск максимального элемента\n2)Поиск минимального элемента\n");
  201. scanf_s("%d", &newchoice);
  202. switch (newchoice)
  203. {
  204. case 1:
  205. findMax(head);
  206. break;
  207. case 2:
  208. findMin(head);
  209. break;
  210. }
  211. }
  212.  
  213.  
  214.  
  215. void main()
  216. {
  217. setlocale(LC_ALL, "rus");
  218. avia *head = NULL;
  219. int choice, count;
  220. while (true)
  221. {
  222. system("cls");
  223. printf("1)Создание списка\n");
  224. printf("2)Добавление элемента в список\n");
  225. printf("3)Удаление элемента из списка\n");
  226. printf("4)Другие функции\n");
  227. printf("5)Вывод списка на экран\n");
  228. printf("6)Выход\n");
  229. scanf_s("%d", &choice);
  230. fflush(stdin);
  231. system("cls");
  232. switch (choice)
  233. {
  234. case 1:
  235. count = CreateList();
  236. system("pause");
  237. break;
  238. case 2:
  239. if (acces == true)
  240. {
  241. if (count1 < count)
  242. {
  243. char destination[255];
  244. int nomer;
  245. char time[255];
  246. printf("Пункт назначения: ");
  247. gets_s(destination);
  248. gets_s(destination);
  249. printf("Введите номер рейса: ");
  250. scanf_s("%d", &nomer);
  251. printf("Введите время: ");
  252. gets_s(time);
  253. gets_s(time);
  254. system("cls");
  255. if (count1 == 0)
  256. {
  257. push(&head, destination, nomer, time);
  258. count1 += 1;
  259. printf("Первый элемент упешно добавлен!\n");
  260. system("pause");
  261. break;
  262. }
  263. printf("1)Добавление в начала списка\n2)Добавление в конец списка\n3)Добавление n-го элемента\n");
  264. int pushChoice;
  265. scanf_s("%d", &pushChoice);
  266. switch (pushChoice)
  267. {
  268. case 1:
  269. push(&head, destination, nomer, time);
  270. count1 += 1;
  271. break;
  272. case 2:
  273. pushback(head, destination, nomer, time);
  274. count1 += 1;
  275. break;
  276. case 3:
  277. printf("Выберите место для элемента ");
  278. int position;
  279. scanf_s("%d", &position);
  280. fflush(stdin);
  281. if (position < 2)
  282. push(&head, destination, nomer, time);
  283. else
  284.  
  285. insert(head, destination, nomer,time, position);
  286. count1 += 1;
  287. break;
  288. }
  289. printf("Элемент успешно добавлен!\n");
  290. }
  291. else
  292. printf("Список полностью заполнен, удалите один из уже имеющихся элементов, что бы добавить новый!\n");
  293. }
  294. else
  295. printf("Вы не можете добавлять элементы, пока не создадите список!\n");
  296. system("pause");
  297. break;
  298. case 3:
  299. if (acces == true)
  300. {
  301. int choice;
  302. printf("1)Удаление первого элемента списка\n");
  303. printf("2)Удаление последнего элемента списка\n");
  304. printf("3)Удаление n - го элемента списка\n");
  305. scanf_s("%d", &choice);
  306. switch (choice)
  307. {
  308. case 1:
  309. pop(&head);
  310. count1 -= 1;
  311. break;
  312. case 2:
  313. popback(&head);
  314. count1 -= 1;
  315. break;
  316. case 3:
  317. printf("Выберите номер элемента: ");
  318. int Nth;
  319. scanf_s("%d", &Nth);
  320. fflush(stdin);
  321. if (Nth < 2)
  322. {
  323. pop(&head);
  324. break;
  325. }
  326. if (Nth == count1)
  327. {
  328. popback(&head);
  329. break;
  330. }
  331. if (Nth > count || Nth <= 0)
  332. printf("Элемента с таким номером в списке нет!");
  333. else
  334. deleteNth(&head, Nth);
  335. break;
  336. }
  337. }
  338. else
  339. printf("Вы не можете удалять элементы, пока не создадите список!\n");
  340. system("pause");
  341. break;
  342. case 4:
  343. if (acces == true)
  344. MoreFnc(&head);
  345. else
  346. printf("Вы не можете использовать фукции, пока не создадите список!\n");
  347. system("pause");
  348. break;
  349. case 5:
  350. if (acces == true)
  351. display(&head);
  352. else
  353. printf("Вы не можете вывести список на экран, пока его не создадите!\n");
  354. system("pause");
  355. break;
  356. case 6:
  357. exit(0);
  358. }
  359. }
  360. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement