ChameL1oN

Жел_1

Mar 11th, 2016
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.61 KB | None | 0 0
  1. #include <iostream>
  2. #include <locale>
  3.  
  4.  
  5. using namespace std;
  6.  
  7.  
  8. //Очередь. Тип поля - int . Удалить из списка первый элемент с четным информационным полем.
  9.  
  10. struct point{
  11. int data;
  12. point* next;
  13. };
  14.  
  15. void print_list(point* beg)
  16. //печать списка
  17. {
  18. point* p = beg;//начало списка
  19. while (p != 0)
  20. {
  21. cout << p->data << "\t";
  22. p = p->next;//переход к следующему элементу
  23. }
  24. }
  25.  
  26. point* make_list(int n)
  27. {
  28. point*beg;//указатель на первый элемент
  29. point*p, *r;//вспомогательные указатели
  30. beg = new(point);//выделяем память под первый элемент
  31. cout << "Введите значение 1 эл-та :" << endl;
  32. cin >> beg->data;//вводим значение информационного поля
  33. beg->next = 0;//обнуляем адресное поле
  34. //ставим на этот элемент указатель p (последний элемент)
  35. p = beg;
  36. for (int i = 0; i<n - 1; i++)
  37. {
  38. r = new(point);//создаем новый элемент
  39. cout << "Введите значение " << i+2 <<" эл-та :" << endl;
  40. cin >> r->data;
  41. r->next = 0;
  42. p->next = r;//связываем p и r
  43. //ставим на r указатель p (последний элемент)
  44. p = r;
  45. }
  46. return beg;//возвращаем beg как результат функции
  47. }
  48.  
  49. point* del_point(point*beg)
  50. //удаление первого эл-та с чётным значением, 0 не считается чётным
  51. {
  52. point*p = beg;
  53. bool flag = true;
  54. while (p != NULL && flag){ //Проверяем, есть ли необходимый эл-т
  55. if (p->data % 2 == 0 && p->data != 0){
  56. flag = false; //Если эл-т существует останавливем цикл
  57. }
  58. p = p->next;
  59. }
  60. p = beg;
  61. if (flag == true) cout << "НЕТ ЭЛ-ТА С ЧЁТНЫМ ЗНАЧЕНИЕМ" << endl << endl;
  62. else{
  63. if (p->data % 2 == 0 && p->data != 0){ //Проверяем голову на чётность
  64. beg = p->next;
  65. delete p;
  66. }
  67. else{ // Если голова нечётная, продолжаем поиск в списке
  68. while (p->next->data % 2 != 0 && p->next != NULL || p->next->data == 0){ //Идём по списку до первого чётного или конца, пропуская 0
  69. p = p->next;
  70. }
  71. if (p->next != NULL && p->next->next != NULL){ //Если находим эл-т в середине списка
  72. point* r = p->next; //Запоминаем нужный эл-т
  73. p->next = r->next; //Изменяем указатель через эл-т
  74. delete r; //Удаляем необходимый эл-т
  75. }
  76. else{ //Если найденый эл-т последний
  77. point* r = p->next;
  78. p->next = NULL;
  79. delete r;
  80. }
  81. }
  82. }
  83. return beg;
  84. }
  85.  
  86. point* del(point*beg)
  87. //удаление списка из памяти
  88. {
  89. point*p = beg;
  90. while (p != NULL){
  91. point* r = p;
  92. p = p->next;
  93. delete r;
  94. }
  95. return beg;
  96. }
  97.  
  98. void main(){
  99. setlocale(LC_ALL, "rus");
  100. int n;
  101. cout << "Введите кол-во элементов" << endl;
  102. cin >> n;
  103. point* beg = make_list(n);
  104. cout << "Исходный список : " << endl;
  105. print_list(beg);
  106. cout << endl;
  107. cout << "Список после обработки : " << endl << endl;
  108. beg = del_point(beg);
  109. print_list(beg);
  110. cout << endl;
  111. beg = del(beg);
  112. cout << "Список удалён из памяти" << endl;
  113. }
Advertisement
Add Comment
Please, Sign In to add comment