Advertisement
Guest User

Untitled

a guest
May 24th, 2015
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.91 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include "locale.h"
  5. #include <stdlib.h>
  6. #include "windows.h"
  7.  
  8. #pragma warning(disable: 4996)
  9. typedef struct node
  10. {
  11. int day;
  12. char month[10];
  13. int year;
  14. char weekday[10];//поле данных
  15. node *next;
  16.  
  17. }day;
  18.  
  19. day *start = NULL, *p ;
  20. int temp = 0;
  21.  
  22. void menu();
  23. void first_create();
  24. void add_nodes();
  25. int deleting();
  26. void print_data();
  27.  
  28. int main()
  29. {
  30. setlocale(LC_ALL, "russian_russia.1251");
  31. menu();
  32. }
  33. void menu()
  34. {
  35. while (1){
  36. system("cls");
  37. int choise = 0;
  38. printf("|------------Меню------------|\n");
  39. printf("1. Формирование первого узла списка\n");
  40. printf("2. Вставка новых узлов с упорядочением по ключу\n");
  41. printf("3. Удаление узла с заданным ключем\n");
  42. printf("4. Вывод данных списка на экран\n");
  43. printf("5. Завершение работы программы\n");
  44. printf("Пожалуйста введите операцию:\n");
  45. scanf_s("%d", &choise);
  46. printf("Вы ввели %d\n", choise);
  47. Sleep(1000);
  48. switch (choise){
  49. case 1: first_create();
  50. break;
  51. case 2: add_nodes();
  52. break;
  53. case 3: deleting();
  54. break;
  55. case 4: print_data();
  56. break;
  57. case 5: exit(0);
  58. }
  59. }
  60. }
  61. //Формирование первого узла списка
  62. void first_create()
  63. {
  64. if (temp == 0)
  65. {
  66. p = (day *)malloc(sizeof(day));//выделяем динамическую память под первый узел
  67. system("cls");
  68. printf("Введите информацию\n");
  69. printf("Введите день(число):\n");
  70. scanf_s("%d", &p->day);
  71. printf("Введите месяЦ:\n");
  72. fflush(stdin);
  73. gets(p->month);
  74. printf("Введите год:\n");
  75. scanf_s("%d", &p->year);
  76. printf("Введите день недели:\n");
  77. fflush(stdin);
  78. gets(p->weekday); //заполняем поле данных
  79. p->next = NULL;
  80. //заполняем поле указателя на следующий узел
  81. start = p; //инициализируем указатель на начало списка
  82. temp = 1;
  83. }
  84. else if (temp != 0)
  85. {
  86. printf("Первый узел уже существует!");
  87. getch();
  88. }
  89. }
  90. //Вставка новых узлов с упорядочением по ключу
  91. void add_nodes()
  92. {
  93. if (temp == 1){
  94. int size = 0;
  95. printf("Пожалуйста введите количество узлов:\n");
  96. scanf_s("%d", &size);
  97. printf("Вы ввели %d\n", size);
  98. for (int i = 0; i < size; i++)
  99. {
  100. p = (day *)malloc(sizeof(day));//выделяем динамическую память под первый узел
  101. system("cls");
  102. printf("Введите информацию\n");
  103. printf("Введите день(число):\n");
  104. scanf_s("%d", &p->day);
  105. printf("Введите месяЦ:\n");
  106. fflush(stdin);
  107. gets(p->month);
  108. printf("Введите год:\n");
  109. scanf_s("%d", &p->year);
  110. printf("Введите день недели:\n");
  111. fflush(stdin);
  112. gets(p->weekday);
  113. node *prev = start, *post = start; //определяем и инициализируем указатели на node
  114. while (post != NULL)
  115. {
  116. if (post->day > p->day)
  117. {
  118. //поместим новый узел между узлами, задаваемыми prev и post
  119. p->next = post;
  120. if (post == start)
  121. start = p; //корректируем указатель на начало списка
  122. else
  123. prev->next = p;
  124. return; //возможный выход из функции
  125. }
  126. prev = post;
  127. post = post->next;
  128. }
  129. //поместим новый узел в конец списка
  130. p->next = NULL;
  131. prev->next = p;
  132. }
  133. printf("Вы ввели список");
  134. getch();
  135. }
  136. if (temp == 0)
  137. {
  138. printf("Первый узел еще не существует");
  139. getch();
  140. }
  141.  
  142. }
  143. /*node *find(int key){
  144. if (key != 0)
  145. {
  146. while (p != NULL)
  147. {
  148. if (p->day == key){
  149. printf("Ключ существует!");
  150. getch();
  151. break;
  152. }//нашли узел с нужным ключем и выходим из цикла
  153. p = p->next; //переходим к следующему узлу списка
  154. }
  155. return p;
  156. }
  157. }*/
  158. //Удаление узла с заданным ключем
  159. int deleting(){
  160.  
  161. node *pkey, *prev = start, *cur = start->next;
  162. int key = 0;
  163. printf("Пожалуйста введите ключ,который хотите удалить:\n");
  164. scanf_s("%d", &key);
  165. printf("Вы ввели %d\n", key);//определяем указатель на node
  166.  
  167. if (key == start->day){
  168. pkey = start;
  169. start = start->next;
  170. free(pkey);
  171. }
  172. else{
  173. while (cur != NULL && cur->day != key){
  174. prev = cur;
  175. cur = cur->next;
  176. }
  177. if (cur != NULL)
  178. {
  179. pkey = cur;
  180. prev->next = cur->next;
  181. free(pkey);
  182. }
  183. return 0;//удаление выполнено успешно
  184. }
  185. return 1; //удаление не выполнено (нет узла с указанным ключем)
  186.  
  187. }
  188. /*pkey = find(key); //ищем узел по заданному ключу
  189. if (pkey != NULL)
  190. {
  191. //узел с заданным ключем найден
  192. if (pkey == start){
  193. start = start->next;//корректируем указатель на начало списка
  194. printf("was found");
  195. }
  196. else
  197. {
  198. //поиск узла, предшествующего удаляемому
  199. node *prev = start; //определяем и инициализируем указатель на node
  200. while (prev != NULL)
  201. {
  202. if (prev->next == pkey)
  203. break; //нашли предшествующий узел и выходим из цикла
  204. prev = prev->next; //переходим к следующему узлу списка
  205. }
  206. prev->next = pkey->next;
  207. }
  208. delete pkey; //освобождаем память из-под удаленного узла
  209. return 0; //удаление выполнено успешно
  210. }
  211. return 1; //удаление не выполнено (нет узла с указанным ключем)
  212.  
  213. }*/
  214. //Вывод данных списка на экран
  215. void print_data()
  216. {
  217. system("cls");
  218. node *p = start;
  219. if (p == NULL)
  220. printf("Список пуст!");
  221. else{
  222. printf("Наш список\n");
  223. printf("---------------------------------------\n");
  224. printf("|День| Месяц | Год|День недели|\n");
  225. printf("---------------------------------------\n");
  226. while (p != NULL)
  227. {
  228. printf("|%4d|%15s|%4d|%11s|\n", p->day, p->month, p->year,p->weekday);
  229. p = p->next;//адресовать следующий элемент списка
  230. printf("---------------------------------------\n");
  231. }
  232. }
  233. _getch();
  234.  
  235. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement